Как найти максимальные значения в DataFrame и вернуть результирующий DataFrame

У меня есть DataFrame, который выглядит примерно так:

df_all_q
Out[43]: 
    Qtot      Ptot  Q_G1  Q_G2      P_G1      P_G2
0    0.0  0.000000   0.0   0.0  0.000000  0.000000
1    5.0  0.576190   0.0   5.0  0.000000  0.576190
2    5.0  0.581900   5.0   0.0  0.581900  0.000000
3   10.0  1.152380   0.0  10.0  0.000000  1.152380
4   10.0  1.163800  10.0   0.0  1.163800  0.000000
5   10.0  1.158090   5.0   5.0  0.581900  0.576190
6   15.0  1.805147  15.0   0.0  1.805147  0.000000
7   15.0  1.734280   5.0  10.0  0.581900  1.152380
8   15.0  1.739990  10.0   5.0  1.163800  0.576190
9   15.0  1.569220   0.0  15.0  0.000000  1.569220
10  20.0  2.381337  15.0   5.0  1.805147  0.576190
11  20.0  2.151120   5.0  15.0  0.581900  1.569220
12  20.0  2.466860  20.0   0.0  2.466860  0.000000
13  20.0  1.782640   0.0  20.0  0.000000  1.782640
14  20.0  2.316180  10.0  10.0  1.163800  1.152380
15  25.0  2.713030   0.0  25.0  0.000000  2.713030
16  25.0  2.364540   5.0  20.0  0.581900  1.782640
17  25.0  3.043050  20.0   5.0  2.466860  0.576190
18  25.0  3.111990  25.0   0.0  3.111990  0.000000
19  25.0  2.957527  15.0  10.0  1.805147  1.152380
20  25.0  2.733020  10.0  15.0  1.163800  1.569220

Теперь мне нужно создать еще один DataFrame с максимальным значением Ptot для каждого Qtot, например:

df_result
Out[45]: 
    Qtot      Ptot  Q_G1  Q_G2      P_G1  P_G2
0    0.0  0.000000   0.0   0.0  0.000000   0.0
2    5.0  0.581900   5.0   0.0  0.581900   0.0
4   10.0  1.163800  10.0   0.0  1.163800   0.0
6   15.0  1.805147  15.0   0.0  1.805147   0.0
12  20.0  2.466860  20.0   0.0  2.466860   0.0
18  25.0  3.111990  25.0   0.0  3.111990   0.0

Я думаю, это должно быть возможно довольно легко, однако я застрял.

Что вы пробовали здесь?

roganjosh 08.04.2019 23:01
df.groupby('Qtot', as_index=False).max()
cs95 08.04.2019 23:02
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
2
33
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете попробовать использовать метод .groupby. Он работает аналогично groupby в sql и возвращает фрейм данных.
После группировки вы определяете операции для групп. Есть операция max для Ptot (как хотите), и вы можете вернуть mean для остальных.
Другой вариант — вернуть только столбец Ptot, а затем объединить полученный фрейм данных со старым.

df_all_q.groupby('Qtot').agg({'Ptot': 'max', 'Q_G1': 'mean',
'Q_G2': 'mean', 'P_G1': 'mean', 'P_G2': 'mean'}).reset_index()

Итак, по частям:
.groupby группирует все Qtot с одинаковыми значениями
.add устанавливает функцию агрегирования для каждого столбца
.reset_index делает Qtot обычный столбец вместо индекса нового фрейма данных

Если, например, вы хотите, чтобы столбец P_G1 в результатах был max вместо mean, вы можете заменить 'max' на 'mean'.
Общие функции агрегации включают sum, max, min, mean, size и first. Полный список можно найти в документы

Другие вопросы по теме