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

Python:从DataFrame按指定列名取值,无匹配时取err列值

嘿,我来帮你搞定这个DataFrame的取值需求!先把你的示例数据用代码还原出来,方便后续测试:

import pandas as pd

df = pd.DataFrame({
    'A': [1, 2, 3, 4],
    'B': [10, 20, 30, 40],
    'C': [100, 200, 300, 400],
    'err': ['x', 'y', 'z', 'q'],
    'col': ['A', 'C', 'D', 'B']
})

接下来分两种场景给你实用方案:


方案1:直观逐行处理(适合小数据集)

如果你的数据量不大,用apply逐行判断是最容易理解的方式,逻辑和你描述的完全一致:

def fetch_result(row):
    target_col = row['col']
    # 检查目标列是否存在于DataFrame中
    if target_col in df.columns:
        return row[target_col]
    else:
        return row['err']

df['result'] = df.apply(fetch_result, axis=1)

运行后就能得到你想要的结果:

ABCerrcolresult
0110100xA1
1220200yC200
2330300zDz
3440400qB40

方案2:向量化高效处理(适合大数据集)

如果你的数据集很大,逐行循环的apply效率会比较低,这时候用向量化操作能大幅提升速度:

# 先把所有列的数值整理成一个字典,键是列名,值是对应列的Series
col_mapping = {col: df[col] for col in df.columns}
# 用map匹配列名对应的数值,匹配不到的用err列填充
df['result'] = df['col'].map(col_mapping).fillna(df['err'])

这个方法完全避免了循环,执行效率更高,最终结果和方案1完全一致。


两种方案各有优势:小数据选方案1(好理解、易调试),大数据选方案2(速度快、性能优)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 16:02:27