Как найти максимальные значения в DataFrame и вернуть результирующий DataFrame - PullRequest
1 голос
/ 08 апреля 2019

У меня есть 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

Полагаю, это вполне возможно, однако я застрял.

1 Ответ

0 голосов
/ 09 апреля 2019

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

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.Полный список можно найти в документах

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