Pandas按条件求和列问题:代码未达预期求解决思路
问题分析与解决
原始数据
Id amt_1 amt_2 final_1 01 23 23 29 02 30 0 30 03 0 0 10 04 10 0 10
预期结果
Id amt_1 amt_2 final_1 final_2 01 23 23 29 29 02 30 0 30 60 03 0 0 10 10 04 10 0 10 20
计算规则
final_2 = final_1 + amt_1(仅当amt_2 == 0时,否则final_2等于final_1)
问题代码错误点
你写的代码:
df['final_2'] = df[['amt_1','final_1']].sum(axis=1).where(df['amt_2'] == 0, 0)
错误在于where方法的第二个参数是0,而根据规则,当amt_2 != 0时,final_2应该等于final_1,不是0。这直接导致不符合条件的行结果错误。
正确实现方式
方法1:使用numpy的where函数
import numpy as np df['final_2'] = np.where(df['amt_2'] == 0, df['final_1'] + df['amt_1'], df['final_1'])
方法2:使用pandas的where方法
调整参数逻辑,先指定不符合条件时的取值为final_1,符合条件时取final_1 + amt_1:
df['final_2'] = df['final_1'].where(df['amt_2'] != 0, df['final_1'] + df['amt_1'])
或者反过来,先计算总和,再替换不符合条件的行:
df['final_2'] = (df['final_1'] + df['amt_1']).where(df['amt_2'] == 0, df['final_1'])
这两种方法都能准确实现规则,得到预期的DataFrame。
内容的提问来源于stack exchange,提问作者Romi
相关产品推荐
相关产品推荐

