我有一个DataFrame
形式的时间序列,我可以groupby
到一个系列
pan.groupby(pan.Time).mean()
只有两列Time
和Value
:
Time Value
2015-04-24 06:38:49 0.023844
2015-04-24 06:39:19 0.019075
2015-04-24 06:43:49 0.023844
2015-04-24 06:44:18 0.019075
2015-04-24 06:44:48 0.023844
2015-04-24 06:45:18 0.019075
2015-04-24 06:47:48 0.023844
2015-04-24 06:48:18 0.019075
2015-04-24 06:50:48 0.023844
2015-04-24 06:51:18 0.019075
2015-04-24 06:51:48 0.023844
2015-04-24 06:52:18 0.019075
2015-04-24 06:52:48 0.023844
2015-04-24 06:53:48 0.019075
2015-04-24 06:55:18 0.023844
2015-04-24 07:00:47 0.019075
2015-04-24 07:01:17 0.023844
2015-04-24 07:01:47 0.019075
我正在尝试做的是弄清楚如何将这些值合并到例如采样率中。 30秒,并对具有多个观察结果的那些箱子进行平均。
在最后一步中,我需要插入这些值,但我确信我可以使用的东西。
但是,我无法弄清楚如何对这些值进行分箱和平均。 Time
是datetime.datetime
个对象,而不是str
。
我尝试了不同的东西,但没有任何作用。飞来飞去的例外情况。
有人在那里得到了这个吗?
答案 0 :(得分:4)
IIUC,您可以在索引级别使用TimeGrouper
和groupby
来计算Value
列的平均值,如下所示:
df.set_index('Time', inplace=True)
# Taking mean values for a frequency of 2 minutes
df_group = df.groupby(pd.TimeGrouper(level='Time', freq='2T'))['Value'].agg('mean')
df_group.dropna(inplace=True)
df_group = df_group.to_frame().reset_index()
print(df_group)
Time Value
0 2015-04-24 06:38:00 0.021459
1 2015-04-24 06:42:00 0.023844
2 2015-04-24 06:44:00 0.020665
3 2015-04-24 06:46:00 0.023844
4 2015-04-24 06:48:00 0.019075
5 2015-04-24 06:50:00 0.022254
6 2015-04-24 06:52:00 0.020665
7 2015-04-24 06:54:00 0.023844
8 2015-04-24 07:00:00 0.020665
您也可以使用@Paul H指出的resample
,这种情况相当简洁。
print(df.set_index('Time').resample('2T').mean().dropna().reset_index())
Time Value
0 2015-04-24 06:38:00 0.021459
1 2015-04-24 06:42:00 0.023844
2 2015-04-24 06:44:00 0.020665
3 2015-04-24 06:46:00 0.023844
4 2015-04-24 06:48:00 0.019075
5 2015-04-24 06:50:00 0.022254
6 2015-04-24 06:52:00 0.020665
7 2015-04-24 06:54:00 0.023844
8 2015-04-24 07:00:00 0.020665