数据框按包含数组的列连接,然后按

问题描述 投票:0回答:1

我有两个数据框:

df1 = c1, c2, c3
       1,  2, [1,2,3,4]
       8,  9, [10,11]


   
   
df2 = c4, c5, c6
       3,  4, [1,2]
       5,  6  [2,3]
   
   
   

我想通过数组交集(c1 intresect c6)连接 df1 和 df2,然后分组 c1 和 c2,其中 r1 包含 df2 的数据帧行列表

result = c1, c2, r1,
         1   2,  [row(3,4), row(5,6)]
     

我如何有效地实现这一目标

我尝试过使用合并、分组

pandas
1个回答
0
投票

IIUC,您可以

explode
merge
,只保留与
drop_duplicates
的重叠,然后
agg
+
groupby.agg
:

out = (df1.explode('c3')
          .merge(df2.explode('c6').reset_index(), left_on='c3', right_on='c6')
          .drop_duplicates(['c1', 'c2', 'index'])
          .set_index(['c1', 'c2'])[['c4', 'c5']].agg(list).agg(list, axis=1)
          .groupby(['c1', 'c2']).agg(list)
          .reset_index(name='r1')
      )

输出:

   c1  c2                r1
0   1   2  [[3, 4], [5, 6]]

可重复输入:

df1 = pd.DataFrame({'c1': [1,8], 'c2': [2,9], 'c3': [[1,2,3,4],[10,11]]})
df2 = pd.DataFrame({'c4': [3,5], 'c5': [4,6], 'c6': [[1,2],[2,3]]})
© www.soinside.com 2019 - 2024. All rights reserved.