У меня есть следующие панды Dataframe (df):
quarters = ['first_q', 'second_q', 'third_q', 'fourth_q']
columns = pd.MultiIndex.from_product([quarters, ['points']])
df = pd.DataFrame([[5, 13, 6, 12], [7,5,5,14], [3,0,7,4]], index=['curry', 'lebron','stockton'], columns=columns)
Out[]:
first_q second_q third_q fourth_q
points points points points
curry 5 13 6 12
lebron 7 5 5 14
stockton 3 0 7 4
Я хотел бы создать новый столбец на уровне 1 (рядом с «точками»), содержащий рейтинг каждого игрока (индекс)аннотации (столбец, уровень 1 «точки») в каждом квартале (столбец, уровень 0).Другими словами, ожидаемый результат:
first_q second_q third_q fourth_q
points ranking points ranking points ranking points ranking
curry 5 2 13 1 6 2 12 2
lebron 7 1 5 2 5 3 14 1
stockton 3 3 0 3 7 1 4 3
Столбец ranking
level-1 в столбце first_q
level-0 означает, что lebron
набрал наибольшее количество очков в первом квартале, а затемна curry
и stockton
закончилась эта четверть на третьем месте.
Мне удалось достичь этого результата с помощью следующего кода:
for quarter in quarters:
df = df.sort_values([(quarter, 'points')], ascending=False)
df.loc[:,(quarter,'ranking')] = np.arange(1, 4)
df = df[quarters]
df = df.reindex(['curry', 'lebron', 'stockton'])
Однако я пытался найти более элегантный / идиоматический способ достижения этого без итерации for
quarters
, но я не нашел ни одного.
Кто-нибудь знает, как этого добиться?
Заранее большое спасибо!