如果我有一个DataFrame,例如
col1 col2 col3
0 x1 typeA 3
1 x2 typeB 13
2 x3 typeB 3
3 x4 typeA 5
4 x5 typeB 1
5 x6 typeA 1
有没有办法按col3为col2中的每个类型排列行?例如,此解决方案看起来像
col1 col2 col3 rank
0 x1 typeA 3 2
1 x2 typeB 13 1
2 x3 typeB 3 2
3 x4 typeA 5 1
4 x5 typeB 1 3
5 x6 typeA 1 3
答案 0 :(得分:1)
transform
与原始数据框保持相同的形状。然后使用lambda
函数根据col3
的分组对col2
进行排名..
df['col4'] = df.groupby('col2').col3.transform(lambda group: group.rank())
>>> df
col1 col2 col3 col4
0 x1 typeA 3 2
1 x2 typeB 13 3
2 x3 typeB 3 2
3 x4 typeA 5 3
4 x5 typeB 1 1
5 x6 typeA 1 1