Python 按分组匹配行

Python 按分组匹配行,python,pandas,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分组,然后根据其排名匹配名称) 我会先使用

是否有一种简单的方法通过分组索引匹配值?我的意思是:

例如,我有一个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分组,然后根据其排名匹配名称)


我会先使用
groupby
+
来执行此操作,然后使用
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

你的帖子上没有代码要更正,对吗?我在学习熊猫,我想知道你是怎么做到的,来理解可能给出的解决方案。@IMCoins我只知道逻辑,但就代码而言,我不知道如何写Yet就像往常一样迷人:))只是出于好奇,如果我想用下面的值而不是上面的值来匹配代码,代码会有多大的不同?例如,对于id=111,新列将是x、y-x和z-y,而不是z-x。@TylerNG不客气。至于你的另一个问题,嗯,它需要一个不同的答案。如果你愿意,给我一点时间。你也可以打开一个新问题,我会在那里回答你。@TylerNG好的,这里是:
(df.Name+'-'+df.groupby('Id').Name.shift().fillna('').str.rstrip('-')
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