如何在Pandas中分别计算正负值求和?求代码优化建议
正确实现方案与代码优化
原代码存在的问题
- 无需使用
groupby:需求是对整个数据集的正负值分别求和,没有分组维度,groupby属于冗余操作 - 语法错误:代码括号不匹配,
groupby与agg的调用逻辑混乱 - 命名不合理:第一个聚合键用了
value,既和原列名重复,也无法体现“负值求和”的含义
方法一:直接计算+构造结果
先筛选出正负值列分别求和,再按期望格式输出:
import pandas as pd # 构造示例数据集 df = pd.DataFrame({ 'ID': ['A', 'B', 'AA', 'TT', 'UV', 'QA', 'WQ', 'QC'], 'value': [-1, -5, 1, 3, 4, 50, -40, 10] }) # 计算正负值总和 positive_total = df[df['value'] > 0]['value'].sum() negative_total = df[df['value'] < 0]['value'].sum() # 生成目标格式的结果 result = pd.Series([positive_total, negative_total], index=['positive', 'negative']) print(result)
输出结果:
positive 68 negative -46 dtype: int64
方法二:使用agg简洁实现
利用Pandas的agg方法直接对value列做多维度聚合,更符合Pandas风格:
result = df['value'].agg( positive=lambda x: x[x > 0].sum(), negative=lambda x: x[x < 0].sum() ) print(result)
该代码会直接输出与需求一致的结果,无需额外构造Series。
内容的提问来源于stack exchange,提问作者Lynn
相关产品推荐
相关产品推荐

