Pandas выберите 2 лучших из каждой группы по абсолютному значению - PullRequest
1 голос
/ 05 августа 2020

У меня есть фрейм данных df:

Col1    Col2    Val1
A       a       -13
A       a       -101
A       a        40
A       b        22
B       b        3
B       b       -55
B       b        5
B       b       -27

Я хочу получить следующее:

Col1    Col2    Val1
A       a      -101
A       a       40
A       b       22
B       b      -55
B       b      -27

Где для каждой группы в Col1 и Col2 я выбор первых 2 на основе абсолютного значения Val1. Я не знаю, как к этому подойти.

Ответы [ 2 ]

4 голосов
/ 05 августа 2020

Мы умеем:

df.loc[df['Val1'].abs().groupby([df['Col1'], df['Col2']])
                       .rank(ascending=False).le(2)]


  Col1 Col2  Val1
1    A    a  -101
2    A    a    40
3    A    b    22
5    B    b   -55
7    B    b   -27
0 голосов
/ 05 августа 2020

Другой вариант с использованием argsort.

 df.loc[df['Val1'].abs().argsort()[::-1]].groupby(['Col1','Col2']).head(2).sort_values(by = 'Col1')
...