首页 > 解决方案 > 在 Pandas 数据框中识别两个 ID 列中的多对多连接?

问题描述

我有一个带有两列 ID 的 Pandas 数据框 df。埋在这两列中的是多对多匹配集,如下例所示:

ID1         ID2

001         003
001         004
002         003
002         004

我正在寻找一种熟练的方法来识别这些块,并返回“第一个到第一个”,第二个到第二个等匹配 - 在上面的例子中,将 001 映射到 003 和 002 到 004(尽管这并不重要 -它可以返回 001 到 004,以及 002 到 003)。

创建数据框

 l1 = ['001','001','002','002']
 l2 = ['003','004','003','004']
 df  = pd.DataFrame(list(zip(l1,l2)),columns=['ID1','ID2'])
 df2 = pd.DataFrame(columns=['ID1','ID2'])

用 ID1 和对应 ID2 值的元组填充第二个数据帧

 for i in df[df.ID1.duplicated()]['ID1'].to_list():
     df2 = df2.append({'ID1':i, 'ID2':tuple(df[df['ID1']==i]['ID2'])}, ignore_index=True)

   ID1         ID2
0  001  (003, 004)
1  002  (003, 004)

按元组分组,并创建一个 ID1 元组,其中 ID2 元组相等

df2.groupby('ID2')['ID1'].apply(tuple)

ID2
(003, 004)    (001, 002)

这给了我我所追求的东西,但这很混乱和尴尬,只有在没有人在看的情况下才有用。我的熊猫并不聪明——我想知道,有没有更锋利的工具可以胜任这项工作?

提前致谢!

标签: pythonpandasmany-to-many

解决方案


推荐阅读