2016-04-26 3 views
2

У меня проблема с рамкой данных pandas. У меня есть кадр данных с тремя столбцами, первые 2 - идентификаторы (str), а третий - число.Группа без потери столбца

Я хотел бы сгруппировать его, чтобы я получил первый столбец третий как max, а второй столбец, соответствующий индексу.

Это не совсем понятно, поэтому давайте приводим пример. Моя dataframe выглядит следующим образом:

id1    id2    amount 
0 first_person  first_category  18 
1 first_person  second_category 37 
2 second_person first_category  229 
3 second_person third_category  23 

Код для него, если вам нужно:

df = pd.DataFrame([['first_person','first_category',18],['first_person','second_category',37],['second_person','first_category',229],['second_person','third_category',23]],columns = ['id1','id2','amount']) 

И я хотел бы получить:

id1    id2    amount 
0 first_person  second_category 37 
1 second_person third_category  229 

Я попробовал метод GroupBy, но заставляет меня освободить вторую колонку:

result = df.groupby(['id1'],as_index=False).agg({'amount':np.max}) 
+0

'df.groupby ([«id1»], as_index = False) .max() '- это то, что вы хотите? – MaxU

+0

Дело в том, что это не каждый раз, когда последняя категория соответствует самой большой сумме (* отредактировал мой пост, чтобы он дал понять). – ysearka

+0

@MaxU подумал, что это тоже будет первое, но оно возвращает максимальные значения как 'id2', так и 'amount', а не строка с максимумом' amount'. –

ответ

1

IIUC вы хотите groupby на «id1» и определить строку с наибольшим количеством используя idxmax и использовать в качестве индекса в исходной ДФ:

In [9]: 
df.loc[df.groupby('id1')['amount'].idxmax()] 

Out[9]: 
      id1    id2 amount 
1 first_person second_category  37 
2 second_person first_category  229 
Смежные вопросы