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

如何在Pandas中基于列表列的任意匹配项合并两个DataFrame?

如何在Pandas中基于列表列的任意匹配项合并两个DataFrame?

嗨,这个需求我之前也碰到过,Pandas自带的merge方法确实没法直接处理列表列与单个值列的匹配,不过咱们完全不用自己写复杂函数,用两步简单操作就能搞定!

解决思路

核心思路是先把包含列表的列"拆展开",让每个列表元素单独占一行,这样就能用常规的merge方法完成匹配了,具体步骤如下:

  • 展开列表列:用explode()方法把第一个DataFrame中包含列表的列拆成多行,每行对应一个列表元素
  • 常规合并:基于展开后的单列和第二个DataFrame的目标列进行合并
  • 整理结果:调整列顺序,去掉不需要的中间列(可选)

代码示例

先构造你给出的示例数据:

import pandas as pd

# 第一个包含列表列的DataFrame
df1 = pd.DataFrame({
    'Column A': ['a', 'b'],
    'Column B': [['val1', 'val2', 'val3'], ['val4', 'val5']]
})

# 第二个用于匹配的DataFrame
df2 = pd.DataFrame({
    'Column C': ['x', 'y'],
    'Column D': ['val1', 'val4']
})

第一步,展开df1的列表列:

# 把Column B的列表拆成单独行
df1_exploded = df1.explode('Column B')

展开后的df1_exploded会变成这样:

Column AColumn B
aval1
aval2
aval3
bval4
bval5

第二步,执行合并操作:

# 基于展开后的Column B和df2的Column D匹配
merged_df = pd.merge(df1_exploded, df2, left_on='Column B', right_on='Column D')

第三步,整理成你想要的列顺序:

# 选择需要的列并调整顺序
final_df = merged_df[['Column A', 'Column D', 'Column C']]

最终得到的结果就是你期望的样子:

Column AColumn DColumn C
aval1x
bval4y

补充说明

如果你的数据集比较大,explode()会暂时增加行数,但后续的merge会自动过滤掉不匹配的行,整体效率比自定义函数要高很多,而且代码简洁易维护~

备注:内容来源于stack exchange,提问作者Mike

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 13:29:36