【问题标题】:Python Pandas - Time/Date, Averaging Data and plotting to a graphPython Pandas - 时间/日期、平均数据和绘制图表
【发布时间】:2020-11-04 23:20:02
【问题描述】:

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

                          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 年 2 月 2 日)一天中每个小时的平均流量。

所以为了澄清,这里是输出应该是什么:

  • 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')

一些建议/澄清将不胜感激:)

【问题讨论】:

    标签: python pandas datetime graph average


    【解决方案1】:

    使用.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()
    

    这会为您提供当天每小时的平均流量。它返回一个数字 - 我不确定这是否是您想要的。如果不是,您是否希望对其他字段之一进行平均?例如平均每小时速度?一天中的每一个小时?

    【讨论】:

    • df.loc ['2018-02-02 00:00:03':'2018-02-02 23:59:59'] 这是使用 df.loc 的错误方法吗这种情况?
    • 另外,我正在寻找一天中每小时的平均流量。
    • 对不起,我编辑了这个答案几次。上面的代码在第二行过滤(但不使用 .loc)df = df[df["Date"] == "2018-02-02"]
    猜你喜欢
    • 2019-03-20
    • 2017-12-27
    • 2018-02-20
    • 2019-05-14
    • 1970-01-01
    • 1970-01-01
    • 2021-03-20
    • 2013-11-09
    • 1970-01-01
    相关资源
    最近更新 更多