Python 按分组匹配行
是否有一种简单的方法通过分组索引匹配值?我的意思是: 例如,我有一个df: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分组,然后根据其排名匹配名称) 我会先使用
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