如何使用Pandas对DataFrame中负数后的连续3个元素求和?
解决DataFrame中计算负数后连续3个元素和的问题
示例数据
先构造符合需求的示例DataFrame:
import pandas as pd df = pd.DataFrame({ 'original': [-1, 2, 3, 4, -2, 5, 6, 4, 1] })
方案1:生成结果列表
提取所有负数的索引,遍历每个索引计算其后连续3个元素的和:
# 获取所有负数的位置索引 neg_indices = df[df['original'] < 0].index.tolist() # 计算每个负数后连续3个元素的和 result_list = [df['original'].iloc[i+1:i+4].sum() for i in neg_indices] print(result_list) # 输出: [9, 15]
方案2:将结果映射到原DataFrame列中
新增一列存储对应负数的计算结果,非负数行填充缺失值:
df['post_neg_sum'] = pd.NA for idx in neg_indices: # 确保后续有足够的元素(避免索引越界) if idx + 3 < len(df): df.loc[idx, 'post_neg_sum'] = df['original'].iloc[idx+1:idx+4].sum() print(df)
执行后输出的DataFrame如下:
original post_neg_sum 0 -1 9 1 2 <NA> 2 3 <NA> 3 4 <NA> 4 -2 15 5 5 <NA> 6 6 <NA> 7 4 <NA> 8 1 <NA>
补充说明
如果遇到负数位于DataFrame末尾、后续不足3个元素的情况,上述代码会跳过该负数的计算(保持对应位置为pd.NA),你也可以根据需求调整逻辑,比如返回现有元素的和或其他默认值。
内容的提问来源于stack exchange,提问作者MiamiBeach
相关产品推荐
相关产品推荐

