如何在 Python 的组内排名?
How to rank within a group in Python?
我有以下数据框
一个 >
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"
需要的输出:
B >
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
我尝试了下面给出的解决方案link
命令: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
应该也能正常工作。
我有以下数据框
一个 >
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"需要的输出: B >
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
我尝试了下面给出的解决方案link
命令: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
应该也能正常工作。