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

如何匹配含多值列的DataFrame双列条件为另一DataFrame新增列

解决方法

核心思路

  • 先处理df1的B列多值问题:将逗号分隔的字符串拆分为列表,同时清除每个元素前后的多余空格,再通过explode方法把列表拆分为独立行,处理后df1每行B列仅存单个值
  • 再通过A、B双列等值匹配合并两个DataFrame,提取需要的C、D列即可

完整实现代码

import pandas as pd

# 构造示例df1
df1 = pd.DataFrame({
    'A': ['a1','a1','a2','a2','a2','a3','a4','a4','a5'],
    'B': ['b1','b2,b3','b3','b2','b4,b1,b5','b4','b5','b6, b2','b6'],
    'C': ['c1','c2','c3','c8','c4','c5','c6','c1','c2'],
    'D': ['d3','d4','d5','d6','d7','d3','d1','d2','d7'],
    'E': ['e1','e2','e3','e1','e2','e4','e5','e1','e2']
})

# 构造示例df2
df2 = pd.DataFrame({
    'A': ['a1','a4','a2','a4'],
    'B': ['b1','b6','b1','b2']
})

# 预处理df1,拆分B列多值为单行
df1_processed = df1.assign(
    B = df1['B'].apply(lambda x: [i.strip() for i in x.split(',')])
).explode('B')

# 双列匹配合并,得到结果
result = df2.merge(
    df1_processed[['A', 'B', 'C', 'D']],
    on=['A', 'B'],
    how='left'
)

print(result)

输出结果

A   B   C   D
0  a1  b1  c1  d3
1  a4  b6  c1  d2
2  a2  b1  c4  d7
3  a4  b2  c1  d2

注意事项

如果df1中存在多个满足A相等且B包含对应值的行,上述代码会返回所有匹配结果;如果仅需要第一条匹配结果,可在预处理df1时增加去重逻辑:

df1_processed = df1_processed.drop_duplicates(subset=['A', 'B'], keep='first')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 06:45:01