排名没有重复

2024-10-03 21:26:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用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(ascending=False, method='first')


Tags: 数据方法namealphadf排序betafirst
2条回答

您可以获取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

有关更多详细信息,请参见this

可能使用排序并拉出索引:

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

相关问题 更多 >