列出两列时合并两个 Pandas 数据框

Posted

技术标签:

【中文标题】列出两列时合并两个 Pandas 数据框【英文标题】:Merge Two Pandas Dataframes when two columns are list 【发布时间】:2017-01-20 03:40:48 【问题描述】:

我有两个 Pandas 数据框,它们需要合并。示例数据框是:

         c1  c2
pd1 = [[1, [1,2]]

         c3  c4
pd2 = [[1, [1,3]], 
       [2,[2,3]]

result = [[1,1], [1,2]]

连接条件是 c2 和 c4 中的列表至少有一个共同元素。

我试过了:

result = pd.merge(pd1, pd2, left_on=list('c2'),right_on=list('c4'), how='inner')

但是,这似乎只在每列中的行是单个值(如浮点数、整数或字符串)时才加入它们。

我已经使用嵌套循环解决了这个问题。当集合变大时,它会像狗一样运行。有没有更快的方法来利用数据帧执行这种合并,或者还有其他更好的方法吗?

【问题讨论】:

【参考方案1】:
pd1 = pd.DataFrame([[1, [1,2]]], columns=['c1', 'c2'])
pd1

pd2 = pd.DataFrame([[1, [1, 2]], [2, [2, 3]]], columns=['c3', 'c4'])
pd2

合并设置

s2 = pd2.c4.apply(pd.Series).stack() \
        .rename_axis(['idx2', 'lst2']).reset_index(name='val')
s2

s1 = pd1.c2.apply(pd.Series).stack() \
        .rename_axis(['idx1', 'lst1']).reset_index(name='val')
s1

mrg = s1.merge(s2)[['idx1', 'idx2']].drop_duplicates()
mrg

a1 = pd1.c1.loc[mrg.idx1].values
a2 = pd2.c3.loc[mrg.idx2]

pd.DataFrame(dict(c1=a1, c3=a2))

【讨论】:

以上是关于列出两列时合并两个 Pandas 数据框的主要内容,如果未能解决你的问题,请参考以下文章

Pandas:合并两个 1D DataFrame,输出两列,并为唯一元素填充填充值

在 pandas/python 的同一数据框中将两列合并为一列

尝试合并两个不同数据框的两列时出现问题?

将大型 Dask 数据框与小型 Pandas 数据框合并

pandas concat 2个数据框,并在合并数据中添加一列新数据。

仅当 Pandas 中的值为空/空时才合并