如何从一列中的每个组中选择前100名?

时间:2019-09-29 13:50:46

标签: python pandas

从数据框列的每个组中选取前N个值

dataframe needed

2 个答案:

答案 0 :(得分:2)

您可以使用rank函数获取每个组的有序行号,而仅获取每个组的前2行以获取所需的数据帧。

在代码中:

df1['rn'] = df1.groupby('year')['rank'].rank(ascending=False)
result_df = df1[df1['rn'] <= 2].drop('rn', axis=1)

给出想要的结果:

   year  rank   name
0  1999     5    ria
1  1999     3    kay
3  2000     4    ria
4  2000     2  manny

将数字2修改为任何需要的N,将给出每个组中的前N行。

答案 1 :(得分:1)

您可以对year进行分组,并使用head(2)进行每个组的前两行:

df1.groupby('year').head(2)

#    year  rank   name                                      
# 0  1999     5    ria                                        
# 1  1999     3    kay                                        
# 3  2000     4    ria                                        
# 4  2000     2  manny                 

请注意,对于未排序的数据,您可能需要在分组之前进行排序,例如

df1.sort_values(['year', 'rank'], ascending=[True, False]).groupby('year').head(2)