You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 01:50:29