自合并后 Pandas 数据框中的重复项

Posted

技术标签:

【中文标题】自合并后 Pandas 数据框中的重复项【英文标题】:Duplicates in Pandas Dataframe after Self Merge 【发布时间】:2018-12-27 12:31:35 【问题描述】:
import pandas as pd

我有一个数据框表

d1 = pd.DataFrame('ID_A':[1, 2, 3], 'name':['Micha', 'Micha', 'Lea'])

-----------------
- ID_A   - name  
-----------------
- 1      - Micha 
- 2      - Micha 
- 3      - Lea   
-----------------

我想做一个自我加入以获得以下内容

---------------------------
- ID_A_x - name  - ID_A_y -
---------------------------
- 1      - Micha - 1      -
- 1      - Micha - 2      -
- 3      - Lea   - 3      -
---------------------------

但是有

pd.merge(d1, d1, left_on='name', right_on='name', how='left')

我得到了对我来说相同的重复对,如何避免它们? 这个结果不是我想要的:

---------------------------
- ID_A_x - name  - ID_A_y -
---------------------------
- 1      - Micha - 1      -
- 1      - Micha - 2      -
- 2      - Micha - 2      -
- 2      - Micha - 1      -
- 3      - Lea   - 3      -
---------------------------

请帮忙。

【问题讨论】:

【参考方案1】:

我不确定我是否正确理解了您。但是一种可能的解决方案(我认为这是您想要的)可能是:

import pandas as pd
d1 = pd.DataFrame('ID_A':[1, 2, 3], 'name':['Micha', 'Micha', 'Lea'])
pd.merge(d1.drop_duplicates(subset='name'), d1, on='name', how='left')

输出:

   ID_A_x   name  ID_A_y
0       1  Micha       1
1       1  Micha       2
2       3    Lea       3

【讨论】:

工作,谢谢。 我似乎遇到了同样的问题。删除重复项可能会起作用,但我担心它首先会产生它们。有更好的解决方案吗? @ColoradoGranite 重复的原因是我们有非唯一的键。我们在“名称”上合并,Micha 在该列中出现了两次。我认为,避免重复的唯一方法是拥有唯一的键。因此,要回答您的问题,我无法根据上述数据找到更好的结果。【参考方案2】:

pd.DataFrame('ID_A_x':[1,1,2,2,3],
             'name':['Mi','Mi','Mi','Mi','Lea'],
             'ID_A_y':[1,2,2,1,3]).drop_duplicates(['ID_A_y','name'])

【讨论】:

这非常适合事后清理。谢谢。 嗨@loegare,我可以有lib名称来显示“在..ms中执行,完成....” @rean 它是一个 jupyter 笔记本扩展,不记得确切的名称

以上是关于自合并后 Pandas 数据框中的重复项的主要内容,如果未能解决你的问题,请参考以下文章

将来自一个数据框的值合并到 Pandas 中的新列中[重复]

如何根据熊猫数据框中的部分匹配来隔离重复项

pandas,如果行包含通配符文本,则合并重复项

如何在熊猫数据框中找到重复项? [复制]

计算 Pandas 数据框中的平均真实范围列 [重复]

Pandas 只识别我的数据框中的一列 [重复]