Python 怎么查询返回不同城市对应不同值的前n位数据?

Python 怎么查询返回不同城市对应不同值的前n位数据?

d = {
    '城市':['xian','lulu','zun','xian','lulu','zun'],
    '系统':['female','male','male','asd','male','male'],
    '流量':[19,18,23,23,19,18]
}
n = pd.DataFrame(d)

n.groupby(by = '城市',sort=False)

n.sort_values(by = ['城市']).set_index(['城市','系统'])

图片说明

预期返回的结果是图中那样,但希望每个城市里面的流量是倒叙返回排第n位的数据;其排序不影响别的城市里面的数据。

————————————————————
感谢诸位,问题已解决。
这是我用的方法:只需要改 n 的值,就可以定想要排前几的数据。

def func(x,n):
   #对数据框avg做排序  ascending:布尔型,True则升序,可以是[True,False],即第一字段升序,第二个降序 
    r = x.sort_values('流量',ascending = False)  
    return r[:n].reset_index()   # 若直接写3,则返回排前3的数据   /或者写n  左闭右开

#position.groupby('city').apply(func) #以城市分组,再输出func数据框,排行前3的数据
n.groupby('城市').apply(func, n = 2)

d = {
    '城市':['xian','lulu','zun','xian','lulu','zun'],
    '系统':['female','male','male','asd','male','male'],
    '流量':[19,18,23,23,19,18]
}
n = pd.DataFrame(d)

n.groupby(by = '城市',sort=False).apply(lambda t: t[t.流量==t.流量.max()])