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

Python处理Excel多条件求和时范围错误求助

问题分析与解决

原始数据

NAME   Year  ACTIVITY     AMOUNT
AA      1        CC          140
AA      1        CC          150
AA      1        DD          80

期望目标

  1. 按NAME、ACTIVITY、Year分组汇总金额,得到:
NAME   ACTIVITY  YEAR   TOTAL AMOUNT
AA      CC        1      290
AA      DD        1       80
  1. 或单独计算符合NAME='AA'、Year='1'、ACTIVITY='CC'的金额总和(预期结果290)

你的代码错误点

  1. 逻辑错误:sum(df['Amount'])直接计算整个Amount列的总和,没有筛选符合条件的行,所以结果总是370
  2. 语法错误:TOTAL AMOUNT[i] == print(...)里,变量名不能包含空格,且==是比较运算符而非赋值符号,写法完全错误
  3. 循环逻辑失效:循环仅判断每行是否符合条件,但未累加符合条件的金额,反而每次都打印全列总和

正确解决方案

方案1:按指定条件单独求和

用Pandas布尔索引筛选符合条件的行后求和:

import pandas as pd

# 假设数据已读入DataFrame
df = pd.DataFrame({
    'NAME': ['AA', 'AA', 'AA'],
    'Year': ['1', '1', '1'],
    'ACTIVITY': ['CC', 'CC', 'DD'],
    'AMOUNT': [140, 150, 80]
})

search_1 = 'AA'
search_2 = '1'
search_3 = 'CC'

# 筛选条件并求和
total = df[(df['NAME'] == search_1) & (df['Year'] == search_2) & (df['ACTIVITY'] == search_3)]['AMOUNT'].sum()
print(total)  # 输出290

方案2:按NAME、ACTIVITY、Year分组汇总所有组

用groupby直接完成分组聚合,一步得到所有组的汇总结果:

# 分组计算总和,保留原列结构
summary_df = df.groupby(['NAME', 'ACTIVITY', 'Year'], as_index=False)['AMOUNT'].sum()
# 重命名列名匹配期望输出
summary_df.rename(columns={'AMOUNT': 'TOTAL AMOUNT'}, inplace=True)
print(summary_df)

输出结果:

NAME ACTIVITY Year  TOTAL AMOUNT
0   AA       CC    1           290
1   AA       DD    1            80

内容的提问来源于stack exchange,提问作者kiwi_kimchi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 02:42:44