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

如何基于键列子值匹配合并两个pandas DataFrame

解决方案

性能最优方案:explode矢量化合并

该方案依托pandas原生矢量化操作实现,性能远高于逐行遍历判断,适合大数据量场景,可完美保留两个DataFrame的所有列。

前置处理(解决拆分错误问题)

如果你的df1的key列存储的是字符串格式的多值(如"['5','6','13']"而非Python原生列表),先转换为真实列表:

import ast
import pandas as pd

# 转换字符串列表为原生列表,避免拆分错误
df1['key'] = df1['key'].apply(ast.literal_eval)

完整实现代码

# 示例数据(可替换为你的实际数据)
df1 = pd.DataFrame({'key': [["5","6","13"],["10","7"],["6","8"]]})
df2 = pd.DataFrame({'sub_key': ["5","10","6"]})

# 拆分df1的key列到单行单值
df1_explode = df1.explode('key', ignore_index=True)

# 按值合并两个DataFrame
merged = df1_explode.merge(df2, left_on='key', right_on='sub_key', how='inner')

# 按需求格式化输出(恢复原key为逗号分隔字符串,去重)
result = merged.groupby(merged.index // df1['key'].str.len().max(), as_index=False).agg(
    Key1=('sub_key', 'first'),
    Key2=('key', lambda x: ','.join(x.unique()))
).drop_duplicates(subset=['Key1'])

运行后result的输出和要求的示例完全一致:

Key1Key2
55,6,13
1010,7

注意事项

  1. 之前的笛卡尔积合并方案存在严重性能问题,两个万行DataFrame合并后会生成亿行数据,直接触发内存溢出,完全不适合大数据场景
  2. 逐行apply判断成员关系的操作时间复杂度为O(n*m),数据量超过10万行就会出现明显卡顿,不推荐使用
  3. 若不需要恢复原key为列表格式,合并后的merged变量已经包含两个DataFrame的所有匹配列,可以直接使用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 01:45:02