Pandas中基于IF条件返回另一列值生成Total列的问题
问题原因
你编写的列表推导式中,满足条件时返回的是完整的Trans_amt列对象,而非当前行对应的单个数值,所以会导致Total列每一行都存储了整个Series,不符合预期。另外你代码里写的Trans_amt 列名尾部带多个空格,要确认和实际DataFrame的列名完全匹配,避免触发列不存在的报错。
解决方案
- 方案1:用Pandas向量化函数
np.where(推荐,数据量大时性能最优)
import numpy as np # 先清理列名首尾空格(可选,避免列名带空格导致的调用错误) df.columns = df.columns.str.strip() df['Total'] = np.where(df['nb_months'] == 1, df['Trans_amt'], 0)
- 方案2:用
loc条件赋值
df.columns = df.columns.str.strip() df['Total'] = 0 df.loc[df['nb_months'] == 1, 'Total'] = df['Trans_amt']
- 方案3:修复原有列表推导式写法(仅适合小数据量场景,大表性能差)
df.columns = df.columns.str.strip() df['Total'] = [row['Trans_amt'] if row['nb_months'] == 1 else 0 for _, row in df.iterrows()]
内容的提问来源于stack exchange,提问作者Himansu Odedra
相关产品推荐
相关产品推荐

