pandas如何计算DataFrame列含当前行在内的连续3个值之和
问题说明
现有如下结构的Pandas DataFrame:
Datetime Data Fn 0 18747.385417 11275.0 0 1 18747.388889 8872.0 1 2 18747.392361 7050.0 0 3 18747.395833 8240.0 1 4 18747.399306 5158.0 1 5 18747.402778 3926.0 0 6 18747.406250 4043.0 0 7 18747.409722 2752.0 1 8 18747.420139 3502.0 1 9 18747.423611 4026.0 1
需求:对Fn列的每个元素,计算包含当前元素在内的连续3个值的总和,结果存入新增的Sum列,预期输出如下:
Datetime Data Fn Sum 0 18747.385417 11275.0 0 0 1 18747.388889 8872.0 1 0 2 18747.392361 7050.0 0 1 3 18747.395833 8240.0 1 2 4 18747.399306 5158.0 1 2 5 18747.402778 3926.0 0 2 6 18747.406250 4043.0 0 1 7 18747.409722 2752.0 1 1 8 18747.420139 3502.0 1 2 9 18747.423611 4026.0 1 3
实现方案
直接使用Pandas内置的滑动窗口方法rolling实现,核心计算逻辑仅需1行:
import pandas as pd # 核心计算逻辑 df['Sum'] = df['Fn'].rolling(window=3, min_periods=3).sum().fillna(0).astype(int)
参数说明
window=3:指定滑动窗口长度为3,每个窗口覆盖当前行及向前相邻的共3行数据min_periods=3:要求窗口内必须有3个有效值才触发求和计算,不足3个的位置返回空值,对应DataFrame前2行的位置.fillna(0):将前2行不足窗口长度产生的空值替换为0,匹配预期输出规则.astype(int):将求和结果转为整数类型,避免输出浮点数
运行上述代码后得到的结果和预期完全一致。
内容的提问来源于stack exchange,提问作者Noah_Seagull
相关产品推荐
相关产品推荐

