Pandas如何计算DataFrame指定列最近14个值的和新增列
问题根因
原代码无法实现预期效果的核心原因:
a.iloc[-14:,col].sum()仅会选取DataFrame全局最后14行的atr1列计算总和,返回单个固定标量值- 将单个标量赋值给DataFrame新列时,Pandas会自动将该值广播到所有行,因此整列结果完全一致,不存在逐行计算的逻辑
正确实现方案
使用Pandas原生的rolling滚动窗口API实现逐行滚动求和,默认窗口规则为「包含当前行在内,向前取指定数量的样本计算」,完全匹配需求。
代码示例
- 严格窗口模式(默认):必须凑够14个有效值才输出计算结果,前13行atrsum值为NaN
a['atrsum'] = a['atr1'].rolling(window=14).sum()
- 自适应窗口模式:不足14个值时,按当前行及之前实际存在的有效值数量求和(例如第2行仅累计前2个atr1值)
a['atrsum'] = a['atr1'].rolling(window=14, min_periods=1).sum()
不需要额外通过
columns.get_loc获取列索引,直接按列名选取atr1列做滚动计算即可,代码更简洁易读。
内容的提问来源于stack exchange,提问作者adsjr
相关产品推荐
相关产品推荐

