我有一个数据集,其一周几乎每2小时获取一次测量结果。我想计算不同日期在同一时间进行的测量的平均值。例如,我要计算在12:00和13:59之间进行的每次测量的平均值。
import pandas as pd
import numpy as np
from datetime import datetime, timedelta
#generating test dataframe
date_today = datetime.now()
time_of_taken_measurment = pd.date_range(date_today, date_today +
timedelta(72), freq='2H20MIN')
np.random.seed(seed=1111)
data = np.random.randint(1, high=100,
size=len(time_of_taken_measurment))
df = pd.DataFrame({'measurementTimestamp': time_of_taken_measurment, 'measurment': data})
df = df.set_index('measurementTimestamp')
#Calculating the mean for measurments taken in the same hour
hourly_average = df.groupby([df.index.hour]).mean()
hourly_average
上面的代码给了我这个输出:
0 47.967742
1 43.354839
2 46.935484
.....
22 42.833333
23 52.741935
我想要这样的结果:
0 mean0
2 mean1
4 mean2
.....
20 mean10
22 mean11
我试图使用rolling_mean函数来解决我的问题,但是我找不到将其应用于静态案例的方法。
答案 0 :(得分:2)
使用datetimeIndex的内置floor
功能,该功能可让您轻松创建2小时制的时间段。
df.groupby(df.index.floor('2H').time).mean()
输出:
measurment
00:00:00 51.516129
02:00:00 54.868852
04:00:00 52.935484
06:00:00 43.177419
08:00:00 43.903226
10:00:00 55.048387
12:00:00 50.639344
14:00:00 48.870968
16:00:00 43.967742
18:00:00 49.225806
20:00:00 43.774194
22:00:00 50.590164