#python #pandas #max #pandas-groupby
Вопрос:
У меня есть фрейм данных Pandas, который выглядит так:
Указатель | ID | значение 1 | значение 2 |
---|---|---|---|
0 | 1 | 200 | 126 |
1 | 1 | 200 | 127 |
2 | 1 | 200 | 128.1 |
3 | 1 | 200 | 125.7 |
4 | 2 | 300.1 | 85 |
5 | 2 | 289.4 | 0 |
6 | 2 | 0 | 76.9 |
7 | 2 | 199.7 | 0 |
Моя цель состоит в том, чтобы найти все строки в каждой ID
группе (1,2 в этом примере), которые имеют максимальное значение для value_1
столбца. Второе условие заключается в том, что при наличии нескольких максимальных значений для каждой группы должна быть взята строка, в которой значение в столбце value_2
максимальное.
Таким образом, целевая таблица должна выглядеть следующим образом:
Указатель | ID | значение 1 | значение 2 |
---|---|---|---|
0 | 1 | 200 | 128.1 |
1 | 2 | 300.1 | 85 |
Ответ №1:
Используйте DataFrame.sort_values
все 3 столбца, а затем DataFrame.drop_duplicates
:
df1 = (df.sort_values(['ID', 'value_1', 'value_2'], ascending=[True, False, False])
.drop_duplicates('ID'))
print (df1)
ID value_1 value_2
2 1 200.0 128.1
4 2 300.1 85.0
Комментарии:
1. У меня есть еще один вопрос: есть ли возможность рассчитать среднее значение
value_1
иvalue_2
(без 0-значений) внутриID
группы?2. @Хорст-Джексон — Как ты думаешь
df = df.set_index('ID').replace(0, np.nan).mean(level=0)
?3. Спасибо, именно то, что я ищу!