【问题标题】:Find the average for user-defined window in pandas在熊猫中查找用户定义窗口的平均值
【发布时间】:2017-09-18 03:46:23
【问题描述】:

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

我正在尝试对数据进行分类,以便获得用户定义窗口的平均值(例如 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

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

例如:

      heart_rate
time            
2.0        162.40
4.0        142.25
6.0        116.25

我似乎只能找到根据预定数量的箱(例如制作直方图)对数据进行分箱的方法,而这只返回计数/频率。

谢谢。

【问题讨论】:

    标签: python pandas dataframe group-by binning


    【解决方案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 类似的解决方案将产生相同的结果。

    【讨论】:

      【解决方案2】:

      就像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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-01-21
        • 1970-01-01
        • 2022-01-08
        • 2016-03-03
        • 2021-03-10
        • 1970-01-01
        • 2015-09-11
        相关资源
        最近更新 更多