python - 在 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)
这给了我我所追求的东西,但这很混乱和尴尬,只有在没有人在看的情况下才有用。我的熊猫并不聪明——我想知道,有没有更锋利的工具可以胜任这项工作?
提前致谢!
解决方案
推荐阅读
- c++ - 模板特化会影响它不特化的变量吗?
- python - 有没有办法在核心网络模拟器中运行 python 脚本?
- docker - 首先构建服务器时,docker-compose 容器未正确托管文件
- python - 为什么当我打印变量 v1 时,即使我应用了 .lower() 方法,它也不会以小写形式打印?
- python - 如何使用用户输入指定在 setup.py 文件中安装的文件夹/包?
- python - 每次我进行更改时,有没有办法可以避免在 Django 上停止和启动“python manage.py runserver”?
- python - 出现在各种 jupyter 命令中的 --sys-prefix 是什么?
- firebase - Firebase Firestore 为 SubSubCollection 显示更简单的 URL
- django - Queryset排序问题我只想显示一个值
- javascript - 无法在反应中呈现来自 Firebase 的集合数据