Binning时间序列与熊猫

时间:2016-08-17 16:44:00

标签: python pandas

我有一个DataFrame形式的时间序列,我可以groupby到一个系列

pan.groupby(pan.Time).mean()

只有两列TimeValue

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秒,并对具有多个观察结果的那些箱子进行平均。

在最后一步中,我需要插入这些值,但我确信我可以使用的东西。

但是,我无法弄清楚如何对这些值进行分箱和平均。 Timedatetime.datetime个对象,而不是str

我尝试了不同的东西,但没有任何作用。飞来飞去的例外情况。

有人在那里得到了这个吗?

1 个答案:

答案 0 :(得分:4)

IIUC,您可以在索引级别使用TimeGroupergroupby来计算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