Pandas前后向扩展窗口自定义标量积计算实现问题咨询
解决方案
直接通过预计算累计和实现,全程向量化操作,性能远高于循环或滚动窗口方案,代码如下:
import pandas as pd if __name__ == "__main__": # 构造示例DataFrame df = pd.DataFrame({'value': list(range(1, 11, 1))}) * 10 limit = 50 df['multiplier'] = 1 + (df['value'] < limit) * 0.666 # 核心计算逻辑 ## 预计算每行value和multiplier的乘积 val_mul = df['value'] * df['multiplier'] ## 计算value列全局总和 total_val = df['value'].sum() ## 计算两个累计和序列 cumsum_val_mul = val_mul.cumsum() cumsum_val = df['value'].cumsum() ## 按规则计算Total,保留1位小数对齐示例 df['Total'] = (cumsum_val_mul + (total_val - cumsum_val)).round(1) # 可选:添加示例中从1开始的Index列 df.insert(0, 'Index', df.index + 1) print(df)
计算逻辑说明
我们可以将需求中的规则拆解为两个部分的和:
- 当前行及之前所有行的
value * multiplier累计和:直接对乘积列做cumsum()即可得到 - 当前行之后所有行的
value之和:等于全局value总和减去到当前行为止的value累计和
两个结果相加直接得到每行的Total值,不需要额外调用滚动窗口或pandas.api.indexers相关接口,时间复杂度为O(n),适合处理任意量级的数据集,运行输出结果和预期完全一致。
内容的提问来源于stack exchange,提问作者divingTobi
相关产品推荐
相关产品推荐

