小编Ale*_*man的帖子

Python的高效滚动修剪意味着

用Python计算滚动(又称移动窗口)修剪平均值的最有效方法是什么?

例如,对于50K行和窗口大小为50的数据集,对于每行我需要取最后50行,删除顶部和底部3个值(窗口大小的5%,向上舍入),并获取其余44个值的平均值.

目前我正在为每一行切片以获取窗口,对窗口进行排序然后切片以修剪它.它运作缓慢,但必须有一个更有效的方式.

[10,12,8,13,7,18,19,9,15,14] # data used for example, in real its a 50k lines df
Run Code Online (Sandbox Code Playgroud)

示例数据集和结果窗口大小为5.对于每一行,我们查看最后5行,对它们进行排序并丢弃1个顶部和1个底部行(5%的5 = 0.25,向上舍入为1).然后我们平均剩下的中间行.

生成此示例的代码设置为DataFrame

pd.DataFrame({
    'value': [10, 12, 8, 13, 7, 18, 19, 9, 15, 14],
    'window_of_last_5_values': [
        np.NaN, np.NaN, np.NaN, np.NaN, '10,12,8,13,7', '12,8,13,7,18',
        '8,13,7,18,19', '13,7,18,19,9', '7,18,19,9,15', '18,19,9,15,14'
    ],
    'values that are counting for average': [
        np.NaN, np.NaN, np.NaN, np.NaN, '10,12,8', '12,8,13', '8,13,18',
        '13,18,9', '18,9,15', '18,15,14'
    ],
    'result': [
        np.NaN, np.NaN, np.NaN, np.NaN, 10.0, 11.0, 13.0, 13.333333333333334,
        14.0, 15.666666666666666
    ]
})
Run Code Online (Sandbox Code Playgroud)

天真实现的示例代码

window_size …
Run Code Online (Sandbox Code Playgroud)

python numpy moving-average dataframe pandas

7
推荐指数
2
解决办法
752
查看次数

标签 统计

dataframe ×1

moving-average ×1

numpy ×1

pandas ×1

python ×1