假设我有下面第一个屏幕截图中所示的数据框,我想按天对分数进行排名,而不考虑每组的“总计”值。
下面的第二个屏幕截图是我希望输出看起来的样子。
有什么有效的方法可以做到这一点?
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]})
查看非总计行并执行排名,然后将其分配给新的“排名”列。由于索引仍然保留,城市将获得正确的排名,但总行数将默认为 NaN。
data.loc[data['City'] != 'Total', 'Rank'] = data.loc[data['City'] != 'Total'].groupby('Day')['Score'].rank(ascending = False)
尝试使用排名
首先过滤掉包含总计的行并使用
.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