如何在Pandas中基于另一列历史值滚动计算截断均值 无需逐行遍历
实现方法
直接用Pandas内置的滚动窗口rolling配合apply即可实现,完全不需要手动写逐行遍历逻辑,3000行数据运算耗时可以忽略:
import pandas as pd from scipy import stats # 先确保表格按Date升序排序,保证历史数据顺序正确 my_table = my_table.sort_values('Date', ascending=True).reset_index(drop=True) # 构造滚动窗口,核心参数说明: # window=90:单窗口最多包含90条数据 # min_periods=1:历史数据不足90条时,用现有全部历史计算 # closed='left':窗口不包含当前行,只取当前行之前的历史数据 roll_window = my_table['Amount'].rolling(window=90, min_periods=1, closed='left') # 对每个窗口应用截断均值计算 my_table['TrimMean'] = roll_window.apply(lambda x: stats.trim_mean(x, 0.1))
验证说明
你可以用样例数据测试计算结果:
- 第12行的TrimMean值会自动取1-11行的Amount值计算截断均值
- 第1000行的TrimMean值会自动取910-999行的Amount值计算截断均值
完全匹配你给出的规则要求。
内容的提问来源于stack exchange,提问作者George
相关产品推荐
相关产品推荐

