首页 > 解决方案 > 在键列的子值上连接两个数据框

问题描述

我目前正在尝试在 Key 列上加入/合并两个 df,其中 df1 中的键是独立值,例如 5,但在 df2 中,键可以包含多个值,例如 [5,6,13]。例如像这样:

df1 = pd.DataFrame({'key': [["5","6","13"],["10","7"],["6","8"]]})
df2 = pd.DataFrame({'sub_key': ["5","10","6"]})

但是,我的 df 要大得多,并且包含许多列,所以一个有效的解决方案会很棒。

因此,我想要一张这样的表格:

键1 键2
5 5,6,13
10 10,7

等等 ....

我已经尝试将这种方法应用于我的代码,但它不起作用:

df1['join'] = 1
df2['join'] = 1
merged= df1.merge(df2, on='join').drop('join', axis=1)
df2.drop('join', axis=1, inplace=True)
merged['match'] = merged.apply(lambda x: x.key(x.sub_key), axis=1).ge(0)

我还尝试拆分和分解列并加入单个值,但问题是,并非所有列值都被正确拆分,一旦加入,我需要将所有内容组合回一个单元格。

帮助将不胜感激!

标签: pythonpandasjoinmergesubstring

解决方案


如果您只想匹配第一个键:

df1['sub_key'] = df1.key.str[0]
df1.merge(df2)

如果你想匹配任何键:

df3 = df1.explode('key').rename(columns={'key':'sub_key'})
df3 = df3.join(df1)
df3.merge(df2)

编辑:第一个版本有一个小错误,已修复。


推荐阅读