Python中如何对DataFrame每行连续4值滚动求和(含空值处理)
实现DataFrame每行连续4个值的滚动求和(含空值判断)
问题说明
原始DataFrame如下:
A B C D E F G 1 2 3 4 4 5 5 100 100 Na 100 100 10 5
需要生成新的DataFrame,计算每行连续4个值的滚动求和:
- 第一行:1+2+3+4对应D列结果,2+3+4+4对应E列结果,3+4+4+5对应F列结果,4+4+5+5对应G列结果
- 计算过程中只要包含空值,结果就为空值
- 期望输出:
D E F G 10 13 16 18 Na Na Na 215
解决方案
使用Pandas的rolling方法按行处理,结合min_periods参数实现空值判断,代码如下:
import pandas as pd import numpy as np # 构造原始DataFrame df = pd.DataFrame({ 'A': [1, 100], 'B': [2, 100], 'C': [3, np.nan], 'D': [4, 100], 'E': [4, 100], 'F': [5, 10], 'G': [5, 5] }) # 按行执行窗口为4的滚动求和,要求窗口内4个值全非空才计算 rolling_result = df.rolling(window=4, axis=1, min_periods=4).sum() # 截取从D列开始的结果,匹配期望输出的列范围 final_df = rolling_result.loc[:, 'D':] print(final_df)
代码解释
rolling(window=4, axis=1):设置滚动窗口大小为4,指定按行(axis=1)进行滚动计算min_periods=4:强制要求窗口内必须有4个非空值才执行求和,否则返回NaN,满足空值判断要求loc[:, 'D':]:因为前3列(A、B、C)无法凑齐4个连续值,所以截取从D列开始的结果,与期望输出的列对齐
运行代码后输出结果与期望一致。
内容的提问来源于stack exchange,提问作者Jennifer Therese
相关产品推荐
相关产品推荐

