从数据框列的每个组中选取前N个值
答案 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)