繁体   English   中英

Pandas groupby和rank - 重复的排名相同

[英]Pandas groupby and rank - same rank for duplicates

这是我的数据帧:

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

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

只使用方法dense rank

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

您可以使用factorize进行transform

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的等级,但我认为这可能不重要(因为它们在任何情况下都被正确地装箱在一起)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM