如何在Pandas中计算排除中心值的居中滚动平均值?
在Pandas中计算排除中心值的居中滚动平均值
要实现排除中心值的居中滚动平均,核心思路是先计算滚动窗口内的总和与元素个数,再减去当前值并调整分母(排除自身),具体代码如下:
import pandas as pd # 构造示例数据 data = {'Values': [13313, 12792, 20254, 34915, 31410, 36532, 36958, 35471, 33018, 38080, 44074, 54165]} df = pd.DataFrame(data) # 计算排除中心值的滚动平均 rolling_sum = df['Values'].rolling(window=11, center=True, min_periods=1).sum() rolling_count = df['Values'].rolling(window=11, center=True, min_periods=1).count() df['Expected'] = (rolling_sum - df['Values']) / (rolling_count - 1) # 查看结果 print(df)
逻辑说明
- 滚动总和:用
rolling.sum()获取窗口内所有元素的总和(包含中心值) - 移除中心值:将总和减去当前行的
Values,得到排除中心值后的总和 - 调整分母:用
rolling.count()获取窗口内有效元素数量,减1后作为分母(排除自身) - 计算平均值:用处理后的总和除以调整后的分母,得到目标结果
结果验证
运行上述代码后,生成的Expected列将与你提供的预期结果完全匹配:
| Values | Expected |
|---|---|
| 13313 | 27180.6 |
| 12792 | 28897 |
| 20254 | 28770.14286 |
| 34915 | 27468.5 |
| 31410 | 29037 |
| 36532 | 30028.5 |
| 36958 | 34071.1 |
| 35471 | 36600.66667 |
| 33018 | 38950.625 |
| 38080 | 38804 |
| 44074 | 39037.33333 |
| 54165 | 37520.2 |
内容的提问来源于stack exchange,提问作者Crowford99
相关产品推荐
相关产品推荐

