gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 02:25:06 25 4
gpt4 key购买 nike

我有这个数据框:

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

关于python - pandas 比 argsort 更快的方式在数据框子集中排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50378153/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com