我如何在 Pandas 中进行分组和排名,同时排除组中的一个值?

问题描述 投票:0回答:2

假设我有下面第一个屏幕截图中所示的数据框,我想按天对分数进行排名,而不考虑每组的“总计”值。

下面的第二个屏幕截图是我希望输出看起来的样子。

有什么有效的方法可以做到这一点?

data = pd.DataFrame({'Day':['Monday','Monday','Monday','Monday','Tuesday','Tuesday','Tuesday','Tuesday'],
                 'City':['NY','Chicago','Miami','Total','NY','Chicago','Miami','Total'],
                 'Score':[100,90,70,260,120,80,90,290]})

python pandas dataframe group-by
2个回答
0
投票

查看非总计行并执行排名,然后将其分配给新的“排名”列。由于索引仍然保留,城市将获得正确的排名,但总行数将默认为 NaN。

data.loc[data['City'] != 'Total', 'Rank'] = data.loc[data['City'] != 'Total'].groupby('Day')['Score'].rank(ascending = False)

0
投票

尝试使用排名

首先过滤掉包含总计的行并使用

.loc

指定排名
data.loc[data['City'] != 'Total', 'Rank'] = data.loc[data['City'] != 'Total'].groupby('Day')['Score'].rank(method='max', ascending=False)


       Day     City  Score  Rank
0   Monday       NY    100   1.0
1   Monday  Chicago     90   2.0
2   Monday    Miami     70   3.0
3   Monday    Total    260   NaN
4  Tuesday       NY    120   1.0
5  Tuesday  Chicago     80   3.0
6  Tuesday    Miami     90   2.0
7  Tuesday    Total    290   NaN
© www.soinside.com 2019 - 2024. All rights reserved.