我有两个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)时,这似乎只会加入它们。
我使用嵌套循环攻击了这个问题。当套装变大时,它会像狗一样运行。有没有更快的方法来执行这种合并利用数据帧,还是有另一种方式更好?
答案 0 :(得分:0)
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))