当两列列表时合并两个Pandas Dataframes

时间:2016-09-12 16:23:34

标签: list pandas dataframe merge

我有两个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')

然而,当每列中的行是单个值(如float,int或string)时,这似乎只会加入它们。

我使用嵌套循环攻击了这个问题。当套装变大时,它会像狗一样运行。有没有更快的方法来执行这种合并利用数据帧,还是有另一种方式更好?

1 个答案:

答案 0 :(得分:0)

pd1 = pd.DataFrame([[1, [1,2]]], columns=['c1', 'c2'])
pd1

enter image description here

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

enter image description here

合并设置

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

enter image description here

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

enter image description here

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

enter image description here

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

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

enter image description here