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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 12:30:52