Python 排名没有重复
我正在尝试使用python对大型数据集进行排序。我不想重复,我不想使用“first”方法,而是希望它查看另一列并根据该值对其进行排序 如果第一列中的列组有重复项,则只应查看第二列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
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用作平局破坏者。明白了。有趣的问题。