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

Если у меня есть кадр данных, похожий на следующий, и я хочу максимальное значение "f0max" из файла с тем же именем.

  f0max file maxtime
0   9   1   1
1   8   1   2
2   7   1   3
3   6   2   4
4   5   2   5
5   4   2   6
6   3   3   7
7   2   3   8
8   1   3   9

так что результат будет

  f0max file maxtime
0   9   1   1
3   6   2   4
6   3   3   7

, поэтому результат будет (в реальных данных нет одинакового значения для f0max и maxtime)

этовозможно в пандах?

Ответы [ 3 ]

0 голосов
/ 13 октября 2018

Чтобы вернуть всю строку, соответствующую максимальному значению f0max в каждом файле

df.sort_values('f0max').groupby('file').tail(1)

Вывод:

   f0max  file  maxtime
6      3     3        7
3      6     2        4
0      9     1        1
0 голосов
/ 15 октября 2018

Вы можете использовать логическое индексирование с GroupBy + transform.Обратите внимание, что включает в себя дубликаты максимумов по группам.

df = df[df['f0max'] == df.groupby('file')['f0max'].transform('max')]

Или вы можете сортировать, а затем отбрасывать дубликаты вашим группировщиком.Если для группы существуют дублированные максимумы, то будет сохранен только один:

df = df.sort_values('f0max', ascending=False)\
       .drop_duplicates('file')

Результат:

print(df)

   f0max  file  maxtime
0      9     1        1
3      6     2        4
6      3     3        7
0 голосов
/ 13 октября 2018

Использование groupby и merge

df1 = df.merge(df.groupby('file', as_index=False)['f0max'].max())
print (df1)

   file  f0max  maxtime
0   1     9       1
1   2     6       4
2   3     3       7
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...