Python Pandas-时间/日期,平均数据并绘制到图形



我在准备数据以使其适合绘制到图形时遇到问题。这是我的数据帧:

Date  Lane Lane Name  Direction DirectionName  
0      2018-02-02 00:00:03.000     6     SB_NS          2         South   
1      2018-02-02 00:00:22.010     5    SB_MID          2         South   
2      2018-02-02 00:00:22.020     4     SB_OS          2         South   
3      2018-02-02 00:00:36.040     6     SB_NS          2         South   
4      2018-02-02 00:00:49.070     6     SB_NS          2         South   
...                        ...   ...       ...        ...           ...   
503763 2018-02-27 23:59:00.090     2    NB_MID          1         North   
503764 2018-02-27 23:59:29.090     6     SB_NS          2         South   
503765 2018-02-27 23:59:32.050     4     SB_OS          2         South   
503766 2018-02-27 23:59:33.070     6     SB_NS          2         South   
503767 2018-02-27 23:59:58.050     1     NB_NS          1         North   
Speed (mph)  Headway (s)  Gap (s)  Flags Flag Text  
0            38.525          NaN      NaN      5    Friday  
1            32.310          NaN      NaN      5    Friday  
2            44.739          NaN      NaN      5    Friday  
3            33.554          NaN      NaN      5    Friday  
4            39.768       12.300   11.847      5    Friday  
...             ...          ...      ...    ...       ...  
503763       32.932        4.415    3.833      2   Tuesday  
503764       29.825       65.500   64.700      2   Tuesday  
503765       29.205      236.000  235.848      2   Tuesday  
503766       37.283        3.330    3.462      2   Tuesday  
503767       36.661       76.000   75.669      2   Tuesday  
[503768 rows x 10 columns]

这是交通数据。每一行都是对某个时间点的交通的单个观察。旗帜只是一周中的一天。数据是在每月的每周二和周五收集的。因此,数据帧包含8个不同的日期,4个周二,4个周五

我想画两张图。一张图将只显示南方的数据,另一张图则只显示北方的数据。这两张图都应该显示我选择的日期(例如2018-02-02(一天中每小时的平均交通量。

因此,为了澄清,以下是输出应该是什么:

  • 2018-02-02 的两个条形图,一个用于北方,一个为南方

  • 每个条形图应显示一天中的每一个小时。

我只是有点困惑于如何只收集单个日期的数据,以及如何收集该日期每小时的平均流量。

到目前为止,我已经按日期/小时进行了分组,并统计了总数。。。如下所示。

Date    DirectionName   count
0   2018-02-02 00:00:00 North   212
1   2018-02-02 00:00:00 South   250
2   2018-02-02 01:00:00 North   130
3   2018-02-02 01:00:00 South   137
4   2018-02-02 02:00:00 North   76
... ... ... ...
379 2018-02-27 21:00:00 South   801
380 2018-02-27 22:00:00 North   425
381 2018-02-27 22:00:00 South   511
382 2018-02-27 23:00:00 North   233
383 2018-02-27 23:00:00 South   301

问题是,计数显然不是每小时的平均数。这种方法也使用每一个日期,当我只想使用一个特定的日期时,比如2018-02-02。

  • 如何更改当前方法以显示每小时平均值而不是每小时总计
  • 如何更改当前方法以仅显示特定日期
  • 我目前的方法不合适吗/有更好的方法吗

这是我当前方法的代码;

df.Date=pd.to_datetime(df.Date)
df.groupby([pd.Grouper(key='Date',freq='H'),df.DirectionName]).size().reset_index(name='count')

如有建议/澄清,我们将不胜感激:(

使用.loc将数据过滤为仅一天,然后正确计算每小时的行数,然后按天分组并获得平均值。

df.Date=pd.to_datetime(df.Date)
df = df[df["Date"] == "2018-02-02"]
hourly = df.groupby([pd.Grouper(key='Date',freq='H'),df.DirectionName]).size().reset_index(name='count')
daily = df.groupby([df.Date, df.DirectionName]).mean()

这将为您提供当天每小时的平均流量。它只返回一个数字——我不确定这是否是你想要的。如果不是,是否希望其他字段取平均值?例如每小时平均速度?一天中的每一个小时?

最新更新