我有以下数据框:
Name Num ID
Red 1 ABC
Red 1 DEF
Red 1 GHI
Blu 2 JKL
Blu 2 MNO
Blu 2 PQR
Blu 2 ZYP
我试图在groupby()
上执行Num
,然后展开数据框,使其看起来像这样:
ToName ToNum ToID FromName FromNum FromID
Red 1 ABC Red 1 DEF
Red 1 ABC Red 1 GHI
Red 1 GHI Red 1 DEF
Blu 2 JKL Blu 2 MNO
Blu 2 JKL Blu 2 PQR
Blu 2 JKL Blu 2 ZYP
Blu 2 MNO Blu 2 PQR
Blu 2 MNO Blu 2 ZYP
Blu 2 PQR Blu 2 ZYP
真正要做的只是groupby Name / Num,然后找到与该组关联的ID的每个组合。我迷路的困难部分是如何在ID
答案 0 :(得分:1)
merge
首先应用sort
,然后应用drop_duplicates
s=df.merge(df,on=['Name','Num']).query('ID_x!=ID_y')
s[['ID_x','ID_y']]=np.sort(s[['ID_x','ID_y']].values,1)
s=s.drop_duplicates()
Out[61]:
Name Num ID_x ID_y
1 Red 1 ABC DEF
2 Red 1 ABC GHI
5 Red 1 DEF GHI
10 Blu 2 JKL MNO
11 Blu 2 JKL PQR
12 Blu 2 JKL ZYP
15 Blu 2 MNO PQR
16 Blu 2 MNO ZYP
20 Blu 2 PQR ZYP