Pandas数据帧的条件分组

时间:2018-04-29 11:46:29

标签: python pandas pandas-groupby

我有一个Pandas数据框,如:

  ID  Group   Rank include 
  1   Group1  1    0     
  2   Group1  2    1     
  3   Group1  3    0     
  4   Group1  4    1     
  5   Group2  1    0     
  6   Group2  2    0     
  7   Group2  3    1    
  8   Group2  4    1     
  9   Group2  5    1      

我想选择满足以下条件的子集: - 该组最多3行 - 包括include = 1的所有行(每组不超过3个) - 最小化每组总排名

基本上,我想从每个组中选择TOP“N”记录,但include = 1的行优先于其余行。

输出数据框:

  ID  Group   Rank include 
  1   Group1  1    0     
  2   Group1  2    1       
  4   Group1  4    1         
  7   Group2  3    1    
  8   Group2  4    1     
  9   Group2  5    1

我尝试了几种方法,但没有一种方法真的奏效,现在我被卡住了 请帮忙!

1 个答案:

答案 0 :(得分:2)

首先按条件对数据框进行排序:

df.sort_values(['include', 'Rank'], ascending=[False, True], inplace=True)

然后groupby Group并获得每个组的前3行。另外,添加sort_values以使最终数据框在Group上排序,然后在Rank上排序,如下所示:

df.groupby('Group').head(3).sort_values(['Group', 'Rank'])

输出:

   ID   Group  Rank  include
0   1  Group1     1        0
1   2  Group1     2        1
3   4  Group1     4        1
6   7  Group2     3        1
7   8  Group2     4        1
8   9  Group2     5        1