Python处理Excel多条件求和时范围错误求助
问题分析与解决
原始数据
NAME Year ACTIVITY AMOUNT AA 1 CC 140 AA 1 CC 150 AA 1 DD 80
期望目标
- 按
NAME、ACTIVITY、Year分组汇总金额,得到:
NAME ACTIVITY YEAR TOTAL AMOUNT AA CC 1 290 AA DD 1 80
- 或单独计算符合
NAME='AA'、Year='1'、ACTIVITY='CC'的金额总和(预期结果290)
你的代码错误点
- 逻辑错误:
sum(df['Amount'])直接计算整个Amount列的总和,没有筛选符合条件的行,所以结果总是370 - 语法错误:
TOTAL AMOUNT[i] == print(...)里,变量名不能包含空格,且==是比较运算符而非赋值符号,写法完全错误 - 循环逻辑失效:循环仅判断每行是否符合条件,但未累加符合条件的金额,反而每次都打印全列总和
正确解决方案
方案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
相关产品推荐
相关产品推荐

