我有一个熊猫数据框,格式如下:
ds sensor_id measurement
0 2019-09-13 12:40:00 20053 0.916667
1 2019-09-13 12:45:00 20053 0.583333
2 2019-09-13 12:50:00 20053 0.733333
....
2837 2019-09-23 17:20:00 20053 2.900000
我想做的是生成一个新的数据帧,在该数据帧中,基于一周中的这5分钟时间段对测量值取平均。即在数据集中每个星期日,星期一,星期二等平均5分钟以上,并获得整周的平均值。
我知道有很多函数可以获取大熊猫中的星期几,但我不知道如何使用它们进行平均。
答案 0 :(得分:2)
IIUC,类似这样:
df = pd.DataFrame(np.random.random(2838),index=pd.date_range('2019-09-13 12:40:00', periods=2838, freq='5T'))
df.groupby(df.index.strftime('%A %H:%M')).mean()
输出:
0
Friday 00:00 0.992586
Friday 00:05 0.454352
Friday 00:10 0.747474
Friday 00:15 0.161208
Friday 00:20 0.422006
Friday 00:25 0.643614
Friday 00:30 0.450312
Friday 00:35 0.029722
Friday 00:40 0.316843
Friday 00:45 0.676068
...
Wednesday 23:10 0.424629
Wednesday 23:15 0.231609
Wednesday 23:20 0.987456
Wednesday 23:25 0.123619
Wednesday 23:30 0.203492
Wednesday 23:35 0.377411
Wednesday 23:40 0.131120
Wednesday 23:45 0.935324
Wednesday 23:50 0.910381
Wednesday 23:55 0.438193
答案 1 :(得分:0)
如果我正确理解了您的问题,请输入以下内容:
import numpy as np
date_range = pd.date_range('10/10/2019', periods=20, freq='Min')
df = pd.DataFrame({'measurement':np.random.randint(0, 100, len(date_range))}, index=date_range)
measurement
2019-10-10 00:00:00 13
2019-10-10 00:01:00 40
2019-10-10 00:02:00 86
............
............
2019-10-10 00:16:00 14
2019-10-10 00:17:00 89
2019-10-10 00:18:00 43
2019-10-10 00:19:00 96
尝试此代码:
df.resample('5Min').mean()
并给出:
measurement
2019-10-10 00:00:00 69.2
2019-10-10 00:05:00 41.8
2019-10-10 00:10:00 26.4
2019-10-10 00:15:00 46.0
答案 2 :(得分:0)
使用您从ds列中了解的功能提取星期几并将其存储在“ day_of_week”列中,类似地,将时间(我的意思是小时:分钟:秒)提取到另一列“时间”中。然后简单地做:
orginal_df.groupby(["day_of_week", "time"]).mean()