You need to enable JavaScript to run this app. Pandas比对两个DataFrame值 匹配后更新对应列内容为yes/no
优惠活动
大模型
产品
解决方案
定价
更多

Pandas比对两个DataFrame值 匹配后更新对应列内容为yes/no

实现方案

核心思路

  • 先提取df1的c1列作为待匹配的目标列表
  • 统一处理df2的c2列格式,将不同类型的取值(列表、单个值、空值)统一转换为集合,方便快速判断元素存在性
  • 遍历每个目标值作为列名,逐行判断该值是否在当前行的c2集合中,赋值yes或no

完整可运行代码

import pandas as pd

# 构造测试数据df1
inp1 = [{'c1':'test1'}, {'c1': 'test2'}, {'c1':'test3'}]
df1 = pd.DataFrame(inp1)

# 构造测试数据df2
inp2 = [{'c1':10, 'c2':['test1', 'teest2'], 'test1':'', 'teest2':''}, {'c1':11,'c2':'teest2'}, {'c1':12,'c2':120}, {'test1':''}, {'teest2':''}]
df2 = pd.DataFrame(inp2)

# 步骤1:提取待匹配目标列表
target_cols = df1['c1'].tolist()

# 步骤2:定义c2值转集合的辅助函数,统一格式避免类型不匹配问题
def c2_to_set(val):
    if pd.isna(val):
        return set()
    if isinstance(val, list):
        return set(map(str, val))
    return {str(val)}

# 步骤3:逐列赋值判断结果
for col in target_cols:
    # 确保目标列存在于df2中,不存在则自动新增
    if col not in df2.columns:
        df2[col] = ''
    df2[col] = df2['c2'].apply(lambda x: 'yes' if col in c2_to_set(x) else 'no')

# 输出最终结果
print(df2)

调整说明

如果需要匹配不区分大小写,或者调整yes/no的大小写格式,直接修改apply逻辑中的返回值即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 18:06:03