2015-08-26 3 views
0

у меня есть этот простой dataframe ДФ:панды - выберите строку максимальных value_counts

User,C,G 
111,ar,1 
112,es,1 
112,es,1 
112,es,2 
113,ca,2 
113,ca,3 
113,ca,3 
114,en,4 

Я сгруппированных что:

result = df.groupby(['User','G'])['C'].value_counts() 

получения:

User G  
111 1 ar 1 
112 1 es 2 
     2 es 1 
113 2 ca 1 
     3 ca 2 
114 4 en 1 

Моя цель затем сохраняйте только строки с максимальным значением value_count на группу, чтобы появился результирующий фрейм:

User G  
111 1 ar 1 
112 1 es 2 
113 3 ca 2 
114 4 en 1 

Я нашел также this вопрос, связанный с аналогичными вопросами, но я не могу понял, как применить этот метод в моем случае.

ответ

2

Вы можете сначала создать маску, чтобы указать, является ли конкретная строка maximum в своей группе.

mask = result.groupby(level='User').apply(lambda g: g == g[g.idxmax()]) 
mask 

User G  
111 1 ar  True 
112 1 es  True 
     2 es False 
113 2 ca False 
     3 ca  True 
114 4 en  True 
dtype: bool 

А затем выберите с помощью этой маски булева

result[mask] 

User G  
111 1 ar 1 
112 1 es 2 
113 3 ca 2 
114 4 en 1 
dtype: int64 
+0

насчет нескольких одинаковых вхождений? Есть ли способ выбрать только одно максимальное значение? Я имею в виду, иногда может случиться, что максимальные значения не уникальны ... –

Смежные вопросы