列出两列时合并两个 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 的同一数据框中将两列合并为一列