数据帧的条件分组

2024-04-26 11:58:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个熊猫数据框,比如:

  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行 -包含包含=1的所有行(每组不超过3个) -最小化每个组的总排名

基本上,我想从每个组中选择前“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

我试过几种方法,但都不管用,现在我被卡住了。
请帮帮我!你知道吗


Tags: 数据方法idinclude记录group条件子集
1条回答
网友
1楼 · 发布于 2024-04-26 11:58:59

首先根据您的条件对数据帧进行排序:

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

然后groupbyGroup并获得每组的前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

相关问题 更多 >