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

如何在Pandas中添加基于两列比较结果的新列?

Pandas根据两列条件生成三值新列的解决方法

你的代码问题分析

  1. 索引方式错误:Pandas不能直接用df[df[column1] > df[column2], "New Column"]这种格式定位行和列,必须用df.loc[行条件, 列名]来修改指定位置的值。
  2. 比较运算符错误:判断相等时用了赋值符号=,应该用比较运算符==。
  3. apply语法错误:lambda的参数不能写成df["column1"],且处理整行数据需要指定axis=1。

正确实现方法

方法1:用df.loc逐条件赋值(逻辑直观)

先给新列设默认值,再覆盖符合条件的行:

# 初始化新列为默认值C
df['New Column'] = 'C'
# 给column1 > column2的行赋值A
df.loc[df['column1'] > df['column2'], 'New Column'] = 'A'
# 给column1 < column2的行赋值B
df.loc[df['column1'] < df['column2'], 'New Column'] = 'B'

方法2:用numpy.select(多场景高效)

如果后续需要扩展更多条件,用numpy.select更简洁高效:

import numpy as np

# 定义条件列表和对应结果
conditions = [
    df['column1'] > df['column2'],
    df['column1'] < df['column2']
]
results = ['A', 'B']

# 生成新列,默认值为C
df['New Column'] = np.select(conditions, results, default='C')

方法3:用apply逐行处理(仅小数据量适用)

如果一定要用apply,需要按行处理,注意参数写法:

df['New Column'] = df.apply(
    lambda row: 'A' if row['column1'] > row['column2'] 
                else 'B' if row['column1'] < row['column2'] 
                else 'C',
    axis=1
)

⚠️ 注意:apply逐行处理效率低,数据量大时不推荐使用。

内容的提问来源于stack exchange,提问作者bmgrice

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 07:42:46