Pandas如何在没有唯一计数的情况下获得不同的排名

2024-04-23 05:29:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个熊猫数据帧,我只想要每个设备的前10个count。我想一个简单的方法是创建一个名为rank的新列,然后删除任何秩大于10的列。以下是数据:

        p_dt         device         namestr     count
0       2020-04-29   windows        m_outcome1  207209
1       2020-04-29   windows        m_outcome2  56599
2       2020-04-29   windows        m_outcome3  2880
3       2020-04-29   windows        m_outcome4  2879
4       2020-04-29   windows        m_outcome5  2879
... ... ... ... ...
50204   2020-04-29   web gateway    wg_outcome1 2
50205   2020-04-29   web gateway    wg_outcome2 2
50206   2020-04-29   web gateway    wg_outcome3 1
50207   2020-04-29   web gateway    wg_outcome4 1
50208   2020-04-29   web gateway    wg_outcome5 1

我遇到的问题是,如果count每个device有多个相同的数字,那么秩会重复几次

df.groupby('deviceproduct', sort=False)['count'].rank(ascending=False)

0         1.0
1         2.0
2         3.0
3         5.0
4         5.0
         ... 
50204    20.5
50205    20.5
50206    23.0
50207    23.0
50208    23.0

对于相同的数据,我只想:

0         1.0
1         2.0
2         3.0
3         5.0
4         6.0
         ... 

有没有办法做到这一点


Tags: 数据方法webfalsedevicewindowscountgateway
1条回答
网友
1楼 · 发布于 2024-04-23 05:29:25

您应该考虑在^{}方法中使用^ {CD1>}。

df.groupby('deviceproduct', sort=False)['count'].rank(ascending=False, method='first')

这将为每个组提供唯一的等级

针对您的数据帧样本进行了测试:

In [860]: df['count']                                                                                                                                                                                       
Out[860]: 
0    207209
1     56599
2      2880
3      2879
4      2879
Name: count, dtype: int64

In [856]: df.groupby('device', sort=False)['count'].rank(ascending=False, method='first')                                                                                                                   
Out[856]: 
0    1.0
1    2.0
2    3.0
3    4.0 # different ranks for same value
4    5.0 # different ranks for same value
Name: count, dtype: float64

相关问题 更多 >