如何使用小时内的值对熊猫系列进行重新采样

时间:2019-06-19 05:50:08

标签: python pandas time-series resampling

我以10分钟的频率记录了时间序列数据。我想每隔一小时取平均值。但是为此,我想在小时之前取3个值,在小时之后取2个值,取平均值并将该值分配给确切的小时时间戳。

例如,我有系列

index = pd.date_range('2000-01-01T00:30:00', periods=63, freq='10min')
series = pd.Series(range(63), index=index)
series
2000-01-01 00:30:00     0
2000-01-01 00:40:00     1
2000-01-01 00:50:00     2
2000-01-01 01:00:00     3
2000-01-01 01:10:00     4
2000-01-01 01:20:00     5
2000-01-01 01:30:00     6
2000-01-01 01:40:00     7
2000-01-01 01:50:00     8
2000-01-01 02:00:00     9
2000-01-01 02:10:00    10
                       ..
2000-01-01 08:50:00    50
2000-01-01 09:00:00    51
2000-01-01 09:10:00    52
2000-01-01 09:20:00    53
2000-01-01 09:30:00    54
2000-01-01 09:40:00    55
2000-01-01 09:50:00    56
2000-01-01 10:00:00    57
2000-01-01 10:10:00    58
2000-01-01 10:20:00    59
2000-01-01 10:30:00    60
2000-01-01 10:40:00    61
2000-01-01 10:50:00    62
Freq: 10T, Length: 63, dtype: int64

所以,如果我这样做

series.resample('1H').mean()
2000-01-01 00:00:00     1.0
2000-01-01 01:00:00     5.5
2000-01-01 02:00:00    11.5
2000-01-01 03:00:00    17.5
2000-01-01 04:00:00    23.5
2000-01-01 05:00:00    29.5
2000-01-01 06:00:00    35.5
2000-01-01 07:00:00    41.5
2000-01-01 08:00:00    47.5
2000-01-01 09:00:00    53.5
2000-01-01 10:00:00    59.5
Freq: H, dtype: float64

第一个值是0、1、2的平均值,并分配给小时0,第二个值是1:00:00到1:50:00的平均值,分配给1:00:00,依此类推上。

我想要的是第一个以1:00:00为中心的平均值,使用从00:30:00到01:20:00的值计算,第二个以02:00:00的中心计算的01:30的值:00到02:20:00等等...

最好的方法是什么?

谢谢!

1 个答案:

答案 0 :(得分:0)

您应该能够做到:

series.index = series.index - pd.Timedelta(30, unit='m')
series_grouped_mean = series.groupby(pd.Grouper(freq='60min')).mean()
series_grouped_mean.index = series_grouped_mean.index + pd.Timedelta(60, unit='m')
series_grouped_mean

我知道了

2000-01-01 01:00:00     2.5
2000-01-01 02:00:00     8.5
2000-01-01 03:00:00    14.5
2000-01-01 04:00:00    20.5
2000-01-01 05:00:00    26.5
2000-01-01 06:00:00    32.5
2000-01-01 07:00:00    38.5
2000-01-01 08:00:00    44.5
2000-01-01 09:00:00    50.5
2000-01-01 10:00:00    56.5
2000-01-01 11:00:00    61.0
Freq: H, dtype: float64