Python 排名没有重复

Python 排名没有重复,python,pandas,Python,Pandas,我正在尝试使用python对大型数据集进行排序。我不想重复,我不想使用“first”方法,而是希望它查看另一列并根据该值对其进行排序 如果第一列中的列组有重复项,则只应查看第二列 Name CountA CountB Alpha 15 3 Beta 20 52 Delta 20 31 Gamma 45 43 我希望排名结束 Name CountA CountB Rank Alpha 15 3 4 Beta 20

我正在尝试使用python对大型数据集进行排序。我不想重复,我不想使用“first”方法,而是希望它查看另一列并根据该值对其进行排序

如果第一列中的列组有重复项,则只应查看第二列

Name   CountA CountB
Alpha  15     3
Beta   20     52
Delta  20     31
Gamma  45     43
我希望排名结束

Name   CountA CountB Rank
Alpha  15     3      4
Beta   20     52     2
Delta  20     31     3
Gamma  45     43     1

目前,我使用的是
df.rank(升序=False,方法='first')
可能使用sort并拉出索引:

import pandas as pd
df = pd.DataFrame({'Name':['A','B','C','D'],'CountA':[15,20,20,45],'CountB':[3,52,31,43]}) 
df['rank'] = df.sort_values(['CountA','CountB'],ascending=False).index + 1 

  Name  CountA  CountB  rank
0    A      15       3     4
1    B      20      52     2
2    C      20      31     3
3    D      45      43     1

您可以获取CountA中值的计数,然后根据CountA的计数大于1来过滤数据帧行。如果计数大于1,则取CountB,否则取CountA

df = pd.DataFrame([[15,3],[20,52],[20,31],[45,43]],columns=['CountA','CountB'])

colAcount = df['CountA'].value_counts()

#then take the indices where colACount > 1 and use them in a where

df['final'] = df['CountA'].where(~df['CountA'].isin(colAcount[colAcount>1].index),df['CountB'])

df = df.sort_values(by='final', ascending=False).reset_index(drop=True)

# the rank is the index
   CountA  CountB  final
0      20      52     52
1      45      43     45
2      20      31     31
3      15       3     15

有关更多详细信息,请参阅。

我最后做了类似的事情,我对计数B进行了排序,然后对计数A进行排序。谢谢您的回答。你似乎回答了一个稍微不同的问题。问题是正确的索引顺序(基于索引)是1,0,2,3。我不想替换这些值,只想让CountB用作平局破坏者。明白了。有趣的问题。