我有一个数据框,其中每个时间戳都有用户获得的一些积分。看起来如下,即几秒钟后收集数据
>> 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
需要你的帮助。谢谢
最佳答案
通过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']
同时将原始索引
转换为groupby
聚合平均值
,最后 reindex
按范围
:
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
关于python - 特定时间间隔内时间索引的平均 pandas 数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48463174/