【问题标题】:Merge Two Pandas Dataframes when two columns are list列出两列时合并两个 Pandas 数据框
【发布时间】: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')

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

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

【问题讨论】:

    标签: list pandas dataframe merge


    【解决方案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))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-24
      • 1970-01-01
      • 1970-01-01
      • 2019-12-16
      • 2015-10-17
      • 2018-03-14
      • 1970-01-01
      相关资源
      最近更新 更多