我有一个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
我似乎只能找到基于预定数量的二进制数据分区数据的方法(例如制作直方图),这只会返回计数/频率。
感谢。
答案 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