自我合并后在熊猫数据框中重复

时间:2018-07-19 11:26:27

标签: python pandas merge duplicates self-join

--disable-gpu

我有一个数据框表

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')

请帮助。

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

Imgur

sum' :: Num n => [n] -> n
sum' = foldl (+) 0

答案 2 :(得分:0)

我认为需要cumcount来计数namename的唯一对g的计数d1['g'] = d1.groupby('name').cumcount() print (d1) ID_A name g 0 1 Micha 0 1 2 Micha 1 2 3 Lea 0 df1 = pd.merge(d1, d1, on=['name', 'g'], how='outer') print (df1) ID_A_x name g ID_A_y 0 1 Micha 0 1 1 2 Micha 1 2 2 3 Lea 0 3 的帮助器列:

df1 = pd.merge(d1, d1, on=['name', 'g'], how='outer').drop('g', axis=1)
print (df1)
   ID_A_x   name  ID_A_y
0       1  Micha       1
1       2  Micha       2
2       3    Lea       3

最后删除帮助者列:

int[][][] count = new int[10][][].Select(t => new int[10][].Select(tt => new int[10]).ToArray()).ToArray();