gpt4 book ai didi

python - 如何在Python中在组内排名?

转载 作者:太空宇宙 更新时间:2023-11-03 14:35:14 25 4
gpt4 key购买 nike

我有以下数据框

一个>

  Bucket    C   Count
PL14 XY23081063 706
PL14 XY23326234 15
PL14 XY23081062 1
PL14 XY23143628 1
FZ595 XY23157633 353
FZ595 XY23683174 107
XM274 XY23681818 139
XM274 XY23681819 108

现在我想插入一个新列“Bucket_Rank”,该列根据“Count”的降序值对每个“Bucket”下的“C”进行排名

所需输出:乙>

Bucket  C   Count   Bucket_Rank
PL14 XY23081063 706 1
PL14 XY23326234 15 2
PL14 XY23081062 1 3
PL14 XY23143628 1 4
FZ595 XY23157633 353 1
FZ595 XY23683174 107 2
XM274 XY23681818 139 1
XM274 XY23681819 108 2

我尝试了以下链接中给出的解决方案

Ranking order per group in Pandas

命令:B["Bucket_Rank"] = A.groupby("Bucket ")["Count"].rank("dense", ascending=False)

但它给了我以下错误..

TypeError: rank() got multiple values for argument 'axis'

During handling of the above exception, another exception occurred:

ValueError

感谢帮助...TIA

最佳答案

使用groupby + argsort:

v = df.groupby('Bucket').Count\
.transform(lambda x: np.argsort(-x) + 1)
v

0 1
1 2
2 3
3 4
4 1
5 2
6 1
7 2
Name: Count, dtype: int64

df['Bucket_Rank'] = v
<小时/>

如果您想使用rank,请指定method='dense'。最好明确指定每个关键字参数,以免混淆。

df.groupby("Bucket")["Count"]\
.rank(method="dense", ascending=False)

0 1.0
1 2.0
2 3.0
3 3.0
4 1.0
5 2.0
6 1.0
7 2.0
Name: Count, dtype: float64

请注意,您得到的结果并不完全符合您的预期,因为相同的计数被分配相同的排名。如果您可以接受这一点,rank 应该也能正常工作。

关于python - 如何在Python中在组内排名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46998281/

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