分组并在数据框上扩展

时间:2019-08-01 15:33:09

标签: python pandas

我有以下数据框:

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

的组合上扩展数据框

1 个答案:

答案 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