【问题标题】:Average pandas dataframe on time index for a particular time interval特定时间间隔的时间索引上的平均 pandas 数据帧
【发布时间】:2018-07-05 21:36:35
【问题描述】:

我有一个数据框,其中每个时间戳都有用户获得的一些积分。如下所示,即几秒钟后收集到的数据

>> df.head()
                     points
timestamp                                                    
2017-05-29 17:40:45    5
2017-05-29 17:41:53    7
2017-05-29 17:42:34    3
2017-05-29 17:42:36    8 
2017-05-29 17:42:37    6

然后我想将其重新采样为 5 分钟的间隔,所以我这样做了

>> df.resample("5min").mean()
                points
timestamp   
5/29/2017 17:40   8
5/29/2017 17:45   1
5/29/2017 17:50   4
5/29/2017 17:55   3
5/29/2017 18:00   8
5/30/2017 17:30   3
5/30/2017 17:35   3
5/30/2017 17:40   7
5/30/2017 17:45   8
5/30/2017 17:50   5
5/30/2017 17:55   7
5/30/2017 18:00   1

现在我想提供这样的输入 input_time = "17:00-18:00" 并且我想将输入时间划分为 5 分钟的间隔,例如[17:05, 17:10 ... 17:55, 18:00]。之后,对于每个间隔,我想获得该特定时间间隔所获得的平均分。结果应如下所示

interval points
17:00     -
17:05     -
….  
17:30     3
17:35     3
17:40     7.5
17:45     4.5
17:50     4.5
17:55     5
18:00     4.5

需要你的帮助。谢谢

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    通过date_range 创建DatetimeIndex 并通过strftime 更改格式:

    input_time = "17:00-18:00"
    s,e = input_time.split('-')
    r = pd.date_range(s, e, freq='5T').strftime('%H:%M')
    print (r)
    ['17:00' '17:05' '17:10' '17:15' '17:20' '17:25' '17:30' '17:35' '17:40'
     '17:45' '17:50' '17:55' '18:00']
    

    还将原始index 转换为groupby 与聚合mean,最后reindexrange

    df = df.groupby(df.index.strftime('%H:%M'))['points'].mean().reindex(r)
    print (df)
    17:00    NaN
    17:05    NaN
    17:10    NaN
    17:15    NaN
    17:20    NaN
    17:25    NaN
    17:30    3.0
    17:35    3.0
    17:40    7.5
    17:45    4.5
    17:50    4.5
    17:55    5.0
    18:00    4.5
    Name: points, dtype: float64
    

    【讨论】:

    • 谢谢。真的很有帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    • 2018-02-12
    • 1970-01-01
    • 1970-01-01
    • 2020-11-18
    • 2019-01-13
    • 1970-01-01
    相关资源
    最近更新 更多