Панды: получить максимальное значение по группе с дополнительными столбцами - PullRequest
0 голосов
/ 22 мая 2018

Я понимаю, что это очень простой вопрос, но, к сожалению, я не могу понять это.Я хочу сгруппировать по позициям и вернуть максимальное общее значение для каждой отдельной позиции.Это просто.Тем не менее, я не могу найти способ также включить столбец плеера дополнительно в результирующий кадр данных.Как я могу создать фрейм данных, который включает в себя одного игрока с максимальным счетом для каждой позиции?

Данный результат фрейма данных:

result = pd.DataFrame([
{'position': 'Top', 'grandtotal': 36.72, 'player': 'Joe'}, 
{'position': 'Top', 'grandtotal': 101.18, 'player': 'Bill'},
{'position': 'Middle', 'grandtotal': 33.32, 'player': 'Jim'}, 
{'position': 'Middle', 'grandtotal': 72.62, 'player': 'Him'}, 
{'position': 'Bottom', 'grandtotal': 42.61, 'player': 'Tim'}, 
{'position': 'Bottom', 'grandtotal': 83.98, 'player': 'Slim'},])

Я могу вернуть позицию и общий итог с помощью:

playerframe = result.groupby(['player', 'position']).sum().reset_index()

Дайте мне:

Top         101.18

Middle      72.62

Bottom      83.98

Мне просто нужно указать имя игрока, набравшего наибольшее количество очков!Кажется, все должно быть так просто.Я хотел бы:

Top         Bill    101.18

Middle      Him    72.62

Bottom      Slim    83.98

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

loc с groupby и idxmax

df.loc[df.groupby('position')['grandtotal'].idxmax()]

   grandtotal player position
5       83.98   Slim   Bottom
3       72.62    Him   Middle
1      101.18   Bill      Top
0 голосов
/ 22 мая 2018

Используя sort_values и groupby agg

result.sort_values('grandtotal').groupby(['position'],as_index=False).agg({'player':'last','grandtotal':'sum'})
Out[345]: 
  position  grandtotal player
0   Bottom      126.59   Slim
1   Middle      105.94    Him
2      Top      137.90   Bill

На основании вашего описания, если вам нужна только строка максимального значения для каждой группы:

result.sort_values('grandtotal').drop_duplicates(['position'],keep='last')
Out[347]: 
   grandtotal player position
3       72.62    Him   Middle
5       83.98   Slim   Bottom
1      101.18   Bill      Top
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...