У меня есть 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
Я думаю, это должно быть возможно довольно легко, однако я застрял.
df.groupby('Qtot', as_index=False).max()
Вы можете попробовать использовать метод .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
. Полный список можно найти в документы
Что вы пробовали здесь?