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

Python pandas如何根据条件从指定列取值填充新增Value列

实现方法

你可以用如下方法实现需求,支持检查列动态扩展,无需修改核心逻辑:


首先确保已导入依赖库:

import pandas as pd
import numpy as np

定义通用匹配取值函数,适配任意数量的检查列:

def get_match_series(df, check_col_list, match_key):
    # 拆分检查列和取值列:列表最后一个元素为取值列,其余为需要检查匹配的列
    check_cols = check_col_list[:-1]
    value_col = check_col_list[-1]
    # 生成匹配掩码:只要任意一个检查列等于目标关键词即满足条件
    match_mask = df[check_cols].eq(match_key).any(axis=1)
    # 满足条件返回对应取值,否则返回空值
    return df[value_col].where(match_mask)

分别对DS1、DS2执行匹配,合并结果到新列Value:

# 分别获取两个数据源的匹配结果
ds1_result = get_match_series(df, ds1_col_check, var_check)
ds2_result = get_match_series(df, ds2_col_check, var_check)

# 合并结果,默认DS1优先级高于DS2,若需调整优先级可交换两个变量的位置
df['Value'] = ds1_result.combine_first(ds2_result)

扩展性说明

如果需要增加检查列,直接把新的检查列名加到对应配置列表的前面即可(列表最后一位始终保留为取值列),无需修改函数逻辑。比如要给DS1增加DS1.ColC作为检查列,只需要修改配置为:

ds1_col_check = ["DS1.ColA","DS1.ColB","DS1.ColC","DS1.Val"]

如果需要调整多个数据源都满足时的取值逻辑,比如拼接两个值,可以将合并步骤替换为:

# 示例:两个数据源都满足时用逗号拼接取值
df['Value'] = ds1_result.fillna('').astype(str) + ds2_result.fillna('').apply(lambda x: f',{x}' if pd.notna(x) else '')
df['Value'] = df['Value'].replace('', np.nan)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 19:24:03