通过分组匹配行的pandas

时间:2017-12-19 16:30:00

标签: python pandas

有没有一种简单的方法可以通过逐个组匹配值?我的意思是:

例如,我有这个df:

 Id   Rank   Name   
 111  7       x      
 111  5       y      
 111  1       z      
 222  1       x      
 333  5       a     
 333  1       b      
 444  1       c     

我想在我的df中添加一个列:(按ID分组,根据其等级匹配名称)

 Id   Rank   Name   New Col
 111  7       x      x
 111  5       y      y-x
 111  1       z      z-x
 222  1       x      x
 333  5       a      a
 333  1       b      b-a
 444  1       c      c

1 个答案:

答案 0 :(得分:1)

我会使用groupby + first执行此操作,然后使用np.where来决定应用更改的位置。

i = df.groupby('Id').Name.transform('first')    
df['New Col'] = np.where(np.equal(df.Name, i), df.Name, df.Name + '-' + i)

df
    Id  Rank Name New Col
0  111     7    x       x
1  111     5    y     y-x
2  111     1    z     z-x
3  222     1    x       x
4  333     5    a       a
5  333     1    b     b-a
6  444     1    c       c