Нахождение максимального значения в группе с дифференциацией

#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. Спасибо, именно то, что я ищу!