如何按子组对DataFrame进行排名

时间:2016-07-25 14:16:05

标签: python pandas

如果我有一个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

1 个答案:

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