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

如何基于参考列在DataFrame中选择行值并生成新列?

没问题呀!刚接触pandas遇到这类逻辑列的问题太正常了,这其实是很常见的条件列赋值场景,给你几种实用的方法,从易理解到简洁都有,挑你顺手的用就行:

方法1:用loc逐条件赋值(最直观,适合新手理解)

这种方法逻辑最直白,就是逐个匹配Y列的取值,然后给Z列对应行赋值:

import pandas as pd

# 假设你的DataFrame名为df
# 先初始化Z列(如果不需要初始值也可以直接赋值)
df['Z'] = ''

# 当Y为'A'时,取D列的值
df.loc[df['Y'] == 'A', 'Z'] = df['D']
# 当Y为'B'时,取E列的值
df.loc[df['Y'] == 'B', 'Z'] = df['E']
# 当Y为'C'时,取F列的值
df.loc[df['Y'] == 'C', 'Z'] = df['F']

loc是pandas里按标签定位的工具,df.loc[条件, 目标列]就能精准选中符合条件的行,给目标列赋值,新手很容易看懂逻辑。

方法2:用numpy.select批量处理多条件

如果后续Y的取值可能增多,用numpy.select会更灵活,把条件和对应取值列做成列表一次性处理:

import pandas as pd
import numpy as np

# 定义条件列表
conditions = [
    df['Y'] == 'A',
    df['Y'] == 'B',
    df['Y'] == 'C'
]
# 对应条件要选取的列
choices = [df['D'], df['E'], df['F']]

# 给Z列赋值,default是当所有条件都不匹配时的默认值,可以根据需求调整
df['Z'] = np.select(conditions, choices, default='')

这种方法把所有条件和取值放在一起,后期维护起来更方便,一眼就能看到所有规则。

方法3:用lookup一步到位(最简洁)

如果你追求代码简洁,这种方法用字典映射+lookup可以一行搞定:

import pandas as pd

# 先创建一个映射字典:Y的取值对应要选的列名
col_mapping = {'A': 'D', 'B': 'E', 'C': 'F'}
# 用map把Y列转换成对应的列名,再用lookup根据行索引和列名取值
df['Z'] = df.lookup(df.index, df['Y'].map(col_mapping))

lookup的作用就是根据行索引和列名的组合,提取对应位置的值,配合map把Y列转成列名,直接就能得到想要的Z列。

小补充

因为你的数据多是字符串类型,这些方法都能完美兼容,赋值后Z列的类型会和D/E/F列保持一致,如果需要统一转成字符串类型,可以加一行:

df['Z'] = df['Z'].astype(str)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:16:43