基于多条件对Pandas DataFrame行求和的正确方法
解决方案
要实现你需要的按条件求和并添加新行的操作,核心是正确筛选符合条件的行,再计算求和,最后将结果作为新行插入。
先纠正你代码里的错误:
- 你用
'Solar' ^ 'Wind'或直接用|连接字符串是完全错误的——这些操作符是对布尔值进行逻辑运算,不能直接用来连接字符串条件。 - 用
&同时判断PRODUCT等于两个不同值,逻辑上不可能有同时满足的行,所以筛选结果为空,求和自然无效。
正确操作步骤:
1. 筛选目标行并计算求和
有两种等价的筛选方式:
方式一:使用isin()(推荐,多值筛选更简洁)
import pandas as pd # 筛选符合条件的行 target_rows = test3.loc[ (test3['SCENARIO'] == 'Stated') & (test3['FLOW'] == 'Total energy supply') & (test3['PRODUCT'].isin(['Solar', 'Wind'])) ] # 计算2030列的求和值 total = target_rows['2030'].sum()
方式二:用|连接多个等于条件(注意每个条件要加括号)
target_rows = test3.loc[ (test3['SCENARIO'] == 'Stated') & (test3['FLOW'] == 'Total energy supply') & ((test3['PRODUCT'] == 'Solar') | (test3['PRODUCT'] == 'Wind')) ] total = target_rows['2030'].sum()
2. 将求和结果作为新行添加到DataFrame
# 构造新行数据,列名必须和原DataFrame一致 new_row = pd.DataFrame({ 'SCENARIO': ['Stated'], 'PRODUCT': ['Solar+Wind'], # 可以自定义这个新行的PRODUCT名称 'FLOW': ['Total energy supply'], '2030': [total] }) # 合并原DataFrame和新行,重置索引避免重复 test3 = pd.concat([test3, new_row], ignore_index=True)
执行完后,你的DataFrame就会新增一行,2030列的值为41.483,符合你的预期。
内容的提问来源于stack exchange,提问作者DGMS89
相关产品推荐
相关产品推荐

