在pandas中查找用户定义窗口的平均值

时间:2017-09-18 03:46:23

标签: python pandas dataframe group-by binning

我有一个pandas数据框,其原始心率数据带有时间索引(以秒为单位)。

我正在尝试对数据进行分区,以便我可以得到用户定义窗口的平均值(例如10s) - 不是滚动平均值,只是平均10s,然后是10s,等等。

import pandas as pd

hr_raw = pd.read_csv('hr_data.csv', index_col='time')
print(hr_raw)

      heart_rate
time            
0.6        164.0
1.0        182.0
1.3        164.0
1.6        150.0
2.0        152.0
2.4        141.0
2.9        163.0
3.2        141.0
3.7        124.0
4.2        116.0
4.7        126.0
5.1        116.0
5.7        107.0

使用上面的示例数据,我希望能够设置用户定义的窗口大小(让我们使用2秒)并生成一个索引为2秒增量的新数据帧,并在时间下降时平均“heart_rate”值进入该窗口(并应继续到数据帧的末尾)。

例如:

      heart_rate
time            
2.0        162.40
4.0        142.25
6.0        116.25

我似乎只能找到基于预定数量的二进制数据分区数据的方法(例如制作直方图),这只会返回计数/频率。

感谢。

2 个答案:

答案 0 :(得分:1)

groupby应该这样做。

df.groupby((df.index // 2 + 1) * 2).mean()

      heart_rate
time            
2.0       165.00
4.0       144.20
6.0       116.25

请注意,我们的答案之间轻微差异的原因是排除了上限。这意味着,在4.0秒的时间间隔内将考虑以2.0秒为单位的读数。这就是通常的方法,使用TimeGrouper的类似解决方案将产生相同的结果。

答案 1 :(得分:1)

像coldspeed指出的那样,2s将被认为是4s,但是,如果你需要2x桶,你可以

In [1038]: df.groupby(np.ceil(df.index/2)*2).mean()
Out[1038]:
      heart_rate
time
2.0       162.40
4.0       142.25
6.0       116.25