熊猫groupby和等级-重复的等级相同

时间:2018-10-10 15:14:46

标签: pandas unique pandas-groupby rank

这是我的数据框:

my_df = pd.DataFrame({'group':['a','a', 'a','b','b'], 'date':['2017-01-02', '2017-01-02','2017-03-01',  '2018-02-05', '2018-04-06']})
my_df['date']= pd.to_datetime(my_df['date'], format = '%Y-%m-%d')

我想为每个组添加等级,其中将为相同的值分配相同的等级。

这是我想要的输出:

    date        group rank
0   2017-01-02      a 1
1   2017-01-02      a 1
2   2017-03-01      a 2
3   2018-02-05      b 1
4   2018-04-06      b 2

我想我可以通过分组两次并排名并重新加入原始数据框来做到这一点,但是我想知道是否有更快的方法来做到这一点。

2 个答案:

答案 0 :(得分:5)

只需将rank与方法dense一起使用

my_df.groupby(['group'])['date'].rank(method ='dense')
Out[6]: 
0    1.0
1    1.0
2    2.0
3    1.0
4    2.0
Name: date, dtype: float64

答案 1 :(得分:2)

您可以结合使用transform和factorize:

my_df['group_rank'] = my_df.groupby(['group'])['date'].transform(lambda x: x.factorize()[0])

>>> my_df
        date group  group_rank
0 2017-01-02     a           0
1 2017-01-02     a           0
2 2017-03-01     a           1
3 2018-02-05     b           0
4 2018-04-06     b           1

如果在末尾添加+ 1,则其排名将为1和2,如您期望的输出那样,但是我认为这可能并不重要(因为在任何情况下都将它们正确地合并在一起)