Это немного необычное требование, но я думаю, что вам нужно выполнить три шага: 1. Оставьте только первые три значения, которые вам действительно нужны.
df = df.sort_values(by='reviews',ascending=False).groupby('location').head(3).reset_index()
Будем надеяться, что в каждом городе останутся только первые три. Затем вам нужно как-то пометить свои данные, возможно, есть лучшие способы сделать это, но есть один способ: - Вы назначаете новый столбец с числами и создаете пользовательскую функцию
import numpy as np
df['nums'] = np.arange(len(df))
Теперь у вас есть столбец, полный цифр (вроде номеров строк). Затем вы создаете свою функцию, которая будет метить ваши данные ...
def my_func(index):
if index % 3 ==0 :
x = 'KWR' + str(1)
elif index % 3 == 1:
x = 'KWR' + str(2)
elif index % 3 == 2:
x = 'KWR' + str(3)
return x
Затем вы можете создать нужные вам метки:
df['labels'] = df.nums.apply(my_func)
Затем вы можете сделать:
my_df = pd.pivot_table(df, values='reviews', index=['location'], columns='labels', aggfunc='max').reset_index()
, который буквально вытаскивает метки (точки разворота) и помещает значения в нужные места.