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

Find the average for user-defined window in pandas

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

我正在尝试对数据进行分类,以便我可以让用户定义平均值 window(例如 10 秒)- 不是滚动平均值,只是 10 秒的平均值,然后是接下来的 10 秒,等等.

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

使用上面的示例数据,我希望能够设置用户定义的 window 大小(让我们使用 2 秒)并生成一个索引为 2 秒增量并平均 'heart_rate' 值,如果时间落入 window(并且应该继续到数据帧的末尾)。

例如:

      heart_rate
time            
2.0        162.40
4.0        142.25
6.0        116.25

我似乎只能找到基于预定数量的分箱(例如制作直方图)对数据进行分箱的方法,而这仅 returns count/frequency.

谢谢。

一个groupby应该可以做到。

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

      heart_rate
time            
2.0       165.00
4.0       144.20
6.0       116.25

请注意,我们的答案之间 略有 差异的原因是排除了上限。这意味着,在 2.0 秒处获取的读数将被视为 4.0 秒的时间间隔。这是通常的做法,使用 TimeGrouper 的类似解决方案将产生相同的结果。

就像coldspeed指出的那样,2s会在4s中被考虑,但是,如果你需要它在2x bucket中,你可以

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