我有这个数据帧:
user1 user2 quantity
--------------------------
Alice Carol 10
Alice Bob 5
Bob Dan 2
Carol Eve 7
Carol Dan 100
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] 举报,一经查实,本站将立刻删除。