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

如何使用类IF语句根据条件从多列中取值创建新列

解决方案

首先澄清一个误解:np.where 并不是只能赋值固定值,它的第二、第三参数支持传入Series对象,可直接取对应行的列值,二分类场景可直接使用。

第一步:构造示例数据

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'field_a': [1,1,3,3],
    'field_b': [2,2,4,4],
    'which_field': ['a','b','a','b']
})

方案1:二分类简单场景,直接用np.where

df['output'] = np.where(df['which_field'] == 'a', df['field_a'], df['field_b'])

方案2:多条件映射场景(支持N个取值对应N个列,性能最优)

如果which_field有多个不同取值对应不同列,只需维护映射规则即可,无需修改核心逻辑:

# 定义映射关系:which_field取值 -> 对应的源列名,可无限新增规则
field_map = {
    'a': 'field_a',
    'b': 'field_b'
    # 'c': 'field_c',
    # 'd': 'field_d'
}

# 生成每行需要读取的目标列名
target_col = df['which_field'].map(field_map)
# 按行索引+列索引取值
df['output'] = df.values[df.index, df.columns.get_indexer(target_col)]

方案3:复杂自定义逻辑场景(灵活性最高)

如果判断逻辑不是简单的键值映射,需要多字段组合判断、自定义计算等,可使用apply实现:

def get_row_value(row):
    if row['which_field'] == 'a':
        return row['field_a']
    elif row['which_field'] == 'b':
        return row['field_b']
    # 可添加任意多判断逻辑
    # 示例:if row['field_a'] > 10 and row['which_field'] == 'c': return xxx
    else:
        return 0 # 自定义默认值

df['output'] = df.apply(get_row_value, axis=1)

运行以上任意方案都可以得到你预期的结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 15:00:05