2015-08-26 116 views
0

我有这个简单的数据帧DF的选择行:大熊猫 - 最大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

什么多项相等出现?有没有办法只选择单个最大值?我的意思是,有时会发生最大值不是唯一的... –