微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – pandas比argsort更快的方式在数据帧子集中排名

我有这个数据帧:

user1    user2   quantity
--------------------------
Alice    Carol     10
Alice    Bob       5
Bob      Dan       2
Carol    Eve       7
Carol    Dan      100

我想按用户1的数量降序对每一行按降序排列.例如:

user1    user2   quantity   order
----------------------------------
Alice    Carol     10       1
Alice    Bob       5        2
Bob      Dan       2        1
Carol    Eve       7        2
Carol    Dan      100       1

目前,我的代码是这样的:

users = df['user1'].unique()
for user in users:
    cond = (df['user1'] == user)
    sort_ser = df[cond]['quantity'].values.argsort()[::-1] # descending
    df.loc[cond, 'order'] = sort_ser + 1

它适用于小型数据帧.但如果它适用于大型的那么它会很慢.我认为这是因为(1)我实际上是按用户运行它,(2)正在发生几种情况.有更快的方法吗?

解决方法:

使用:

df['order'] = df.groupby('user1')['quantity'].rank(ascending=False).astype(int)

输出

   user1  user2  quantity  order
0  Alice  Carol        10      1
1  Alice    Bob         5      2
2    Bob    Dan         2      1
3  Carol    Eve         7      2
4  Carol    Dan       100      1

细节.

df.groupby('user1')['quantity'].rank(ascending=False)

输出

0    1.0
1    2.0
2    1.0
3    2.0
4    1.0
Name: quantity, dtype: float64

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐