2016-06-02 1 views
0

с пандами,с пандами, найти строку макс (цв) в каждой группе

CREATE TABLE ForgeRock 
    (`id` int, `productName` varchar(7), `score` int) 
; 


INSERT INTO ForgeRock 
    (`id`, `productName`, `score`) 
VALUES 
    (1, 'OpenIDM', '8'), 
    (2, 'OpenAM', '3'), 
    (3, 'OpenDJ', '7'), 
    (4, 'OpenDJ', '4'), 
    (5, 'OpenAM', '9') 
; 

хотел результат

1 OpenIDM 8 
3 OpenDJ 7 
5 OpenAM 9 

Чтобы получить максимальный балл по каждой группе,

df.groupby('productName')['score'].max() 

Результат:

OpenAM 9 
OpenDJ 7 
OpenIDM 8 

Результат правильный, но мне нужны полные колмуны -> id также. Как я могу получить балл (макс.) С id и productName?

ответ

0

Вы хотите использовать idxmax вместо max. Таким образом, вы получаете значения индекса, с которых произошли максимумы. Затем вы можете использовать их для доступа ко всей строке данных.

max_idx = df.groupby('productName', as_index=False)['score'].idxmax() 

print df.loc[max_idx] 

    id productName score 
4 5  OpenAM  9 
2 3  OpenDJ  7 
0 1  OpenIDM  8 
+0

Thx много! Это то, чего я хотел. Мне нужно знать о idmax больше! – avalon