我有两个生成器的生成数据,它们是 15 分钟的时间块,我想每小时转换一次。下面是一个例子:
Time Gen1 Gen2
00:15:00 10 21
00:30:00 12 22
00:45:00 16 26
01:00:00 20 11
01:15:00 60 51
01:30:00 30 31
01:45:00 70 21
02:00:00 40 61
我想取前 4 个值的平均值(基本上是 15 分钟块到每小时块)并将它们放在 1 小时块的位置。预期输出:
Time Gen1 Gen2
01:00:00 14.5 20
02:00:00 50 41
我知道我可以使用熊猫的 grourpby 函数来获得预期的输出,但我不知道它的正确语法。所以有人可以帮忙吗?
答案 0 :(得分:2)
将 resample
与 closed='right'
一起使用。但首先我们将您的 Time
列转换为 datetime
类型:
df['Time'] = pd.to_datetime(df['Time'])
df.resample('H', on='Time', closed='right').mean().reset_index()
Time Gen1 Gen2
0 2021-01-09 00:00:00 14.5 20.0
1 2021-01-09 01:00:00 50.0 41.0
要将 Time
列转换回时间格式,请使用:
df['Time'] = df['Time'].dt.time
Time Gen1 Gen2
0 00:00:00 14.5 20.0
1 01:00:00 50.0 41.0
答案 1 :(得分:1)
您可以尝试先创建一个列 hour
,然后再创建一个 groupby('hour').mean()
。
df['date_time'] = pd.to_datetime(df['Time'], format="%H:%M:%S")
df['hour'] = df['date_time'].apply(lambda x: x.strftime("%H:00:00"))
gr_df = df.groupby('hour').mean()
gr_df.index.name = 'Time'
print(gr_df.reset_index())
Time Gen1 Gen2
0 00:00:00 12.666667 23.0
1 01:00:00 45.000000 28.5
2 02:00:00 40.000000 61.0