时间戳和星期几的平均值

时间:2019-10-10 20:45:19

标签: python pandas

我有一个熊猫数据框,格式如下:

            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分钟以上,并获得整周的平均值。

我知道有很多函数可以获取大熊猫中的星期几,但我不知道如何使用它们进行平均。

3 个答案:

答案 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()
相关问题