Как получить всю строку на основе максимального значения из одного столбца в pandas .groupby (). Max ()? - PullRequest
0 голосов
/ 30 мая 2020

Я хочу указать, что мне нужно получить всю строку для максимального значения, а не разные максимальные значения из нескольких строк, в моем примере это должно быть основано на столбце «Число». Примерно так:

import pandas as pd

data = {
    'Number':[12,55,3,2,88,17],
    'People':['Zack','Zack','Merry','Merry','Cross','Cross'],
    'Random':[353,0.5454,0.5454336,32,-7,4]
}

df = pd.DataFrame (data, columns = ['Number','People','Random'])

print(df,'\n')

max_values = df.groupby('People').max()

print(max_values)

Вот результат:

   Number People      Random
0      12   Zack  353.000000
1      55   Zack    0.545400
2       3  Merry    0.545434
3       2  Merry   32.000000
4      88  Cross   -7.000000
5      17  Cross    4.000000 

        Number  Random
People                
Cross       88     4.0
Merry        3    32.0
Zack        55   353.0

Вот ожидаемый результат для max_values:

        Number  Random
People                
Cross       88    -7.000000
Merry        3    0.545434
Zack        55   353.0

Ответы [ 2 ]

0 голосов
/ 30 мая 2020

Вы можете попробовать что-то вроде этого -

df['max_number'] = df.groupby(['People'])['Number'].transform(max)
df[df.Number == df.max_number].drop('max_number', axis=1).set_index('People')

         Number Random
People                  
Zack        55  0.545400
Merry        3  0.545434
Cross       88 -7.000000
0 голосов
/ 30 мая 2020

Вы можете сделать следующее:

import pandas as pd

data = {
    'Number':[12,55,3,2,88,17],
    'People':['Zack','Zack','Merry','Merry','Cross','Cross'],
    'Random':[353,0.5454,0.5454336,32,-7,4]
}

df = pd.DataFrame (data, columns = ['Number','People','Random'])

print(df,'\n')

res = df[df.groupby(['People'])['Number'].transform(max) == df['Number']].set_index('People')
print(res)

Что дает следующий результат:

        Number    Random
People                  
Zack        55  0.545400
Merry        3  0.545434
Cross       88 -7.000000

Проблема в вашем коде заключалась в том, что max() применяется к столбцу, поэтому с помощью вы можете избежать этой проблемы.

Примечание Ожидаемый результат - ошибка в вопросе

...