group by pandas удаляет дубликаты - PullRequest
0 голосов
/ 23 ноября 2018

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

a     b     c
1     2     20
1     2     15
2     4     30
3     2     20
3     2     15

, и я хочу распознать только максимальные значения из столбца c

Я пытался

a = df.loc[df.groupby('b')['c'].idxmax()] 

, но это группаby удаляет дубликаты, поэтому я получаю

    a     b     c
    1     2     20
    2     4     30

, он удаляет строки 3, потому что они совпадают со строками 1.

Можно ли написать код, чтобы не удалять дубликаты?

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

Также учитывайте столбец a при выполнении groupby:

a = df.loc[df.groupby(['a', 'b'])['c'].idxmax()]

   a  b   c
0  1  2  20
2  2  4  30
3  3  2  20
0 голосов
/ 23 ноября 2018

Я думаю, вам нужно:

df = df[df['c'] == df.groupby('b')['c'].transform('max')] 
print (df)
   a  b   c
0  1  2  20
2  2  4  30
3  3  2  20

Разница в изменившихся данных:

print (df)
   a  b   c
0  1  2  30
1  1  2  30
2  1  2  15
3  2  4  30
4  3  2  20
5  3  2  15

#only 1 max rows per groups a and b
a = df.loc[df.groupby(['a', 'b'])['c'].idxmax()]
print (a)
   a  b   c
0  1  2  30
3  2  4  30
4  3  2  20

#all max rows per groups b
df1 = df[df['c'] == df.groupby('b')['c'].transform('max')] 
print (df1)
   a  b   c
0  1  2  30
1  1  2  30
3  2  4  30

#all max rows per groups a and b
df2 = df[df['c'] == df.groupby(['a', 'b'])['c'].transform('max')] 
print (df2)
   a  b   c
0  1  2  30
1  1  2  30
3  2  4  30
4  3  2  20
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...