Вывод после группировки и агрегации - PullRequest
0 голосов
/ 10 февраля 2019

У меня есть кадр данных PANDAS.Когда я делаю GROUP BY и функцию агрегирования, такую ​​как min или max, я получаю только частичные результаты, а именно столбец, для которого я произвел агрегирование min / max для числового столбца.Как я могу получить полную строку, т.е. все данные, соответствующие этому минимуму / максимуму?

Фрейм данных выглядит примерно так:

Place    Year   Time        TimeS
BOSTON   1973   02:16:03    8163
FUKUOKA  1973   02:11:45    7905
NEW YORK 1973   02:21:54    8514
BERLIN   1974   02:44:53    9893
BOSTON   1974   02:13:39    8019
FUKUOKA  1974   02:11:32    7892
NEW YORK 1974   02:26:30    8790

Я хочу, чтобы минимальное или максимальное время было реализовано в год игород.Я могу получить время только с (марафон - это имя панды. Фрейм данных)

marathon.groupby('year').TimeS.max()

, что дает:

1973    02:21:54
1974    02:44:53

Как я могу получить место, которое соответствует этому времени?А именно:

NEW YORK   1973    02:21:54
BERLIN     1974    02:44:53

1 Ответ

0 голосов
/ 10 февраля 2019

Есть много способов сделать это, определенно.Вот два:

marathon[marathon.TimeS == marathon.groupby('Year').TimeS.transform('max')]

или

marathon[marathon.TimeS.isin(marathon.groupby('Year').TimeS.max())]

Давайте проверим некоторые из этих промежуточных объектов

In [29]: marathon.groupby('Year').TimeS.max()
Out[29]:
Year
1973    8514
1974    9893
Name: TimeS, dtype: int64

Итак, мы получаем серию, но только из двух значений,Таким образом, мы можем индексировать фрейм данных везде, где значения столбцов равны одному из них, что является вторым решением.

В первом решении вместо этого используется transform('max'), который сохраняет размер кадра данных:

In [30]: marathon.groupby('Year').TimeS.transform('max')
Out[30]:
0    8514
1    8514
2    8514
3    9893
4    9893
5    9893
6    9893
Name: TimeS, dtype: int64

Так что теперь это тот же размер, и мы можем просто сравнить равенство непосредственно со столбцами, что оноравно.

Обратите внимание, что если максимальные значения встречаются несколько раз, оба этих метода также будут возвращать дубликаты - которые могут быть, а могут и не быть теми, которые вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...