【问题标题】:Duplicates in Pandas Dataframe after Self Merge自合并后 Pandas 数据框中的重复项
【发布时间】: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      -
---------------------------

请帮忙。

【问题讨论】:

    标签: python pandas merge duplicates self-join


    【解决方案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 笔记本扩展,不记得确切的名称
    猜你喜欢
    • 2017-03-27
    • 2018-11-01
    • 2021-11-11
    • 1970-01-01
    • 2017-12-16
    • 2020-04-10
    • 2018-05-01
    • 2019-01-21
    • 2018-05-06
    相关资源
    最近更新 更多