我有一个数据帧:
df = pd.DataFrame()
df['bird'] = ['shikra','shikra','eagle','eagle','eagle','crow','sparrow','sparrow']
df['bird2'] = [1,1,2,2,2,3,4,4]
df['n'] = ['a','b','c','d','e','f','g','h']
df['range'] = [1400,1600,np.nan,2800,3300,np.nan,800,600]
bird bird2 n range
0 shikra 1 a 1400.0
1 shikra 1 b 1600.0
2 eagle 2 c NaN
3 eagle 2 d 2800.0
4 eagle 2 e 3300.0
5 crow 3 f NaN
6 sparrow 4 g 800.0
7 sparrow 4 h 600.0
我想从大约的数据中找出最大射程的前2只鸟。你知道吗
我使用了groupby
操作,如下所示:
df.groupby(['bird','bird2']).agg({'range':'max', 'n':'first'}).reset_index().sort_values('range', ascending=False).head(2)
输出为:
bird bird2 range n
1 eagle 2 3300.0 c
2 shikra 1 1600.0 a
以上输出的唯一问题是column n
。因为我在agg
中选择了first
,它给出了相应groupby值的第一个值,但实际上我想要的是n
的值,它与最大范围有关。你知道吗
如何从n
列中选择值,其中range
是max
预期输出:
bird bird2 range n
1 eagle 2 3300.0 e
2 shikra 1 1600.0 b
首先使用^{} ,然后按^{} 删除两列的重复项,并按^{} 或^{} 选择顶值:
也可以直接使用max函数:
正如jezreal提到的,max还会找到最大字符串f。但当你按范围分类时,它就就位了。你知道吗
相关问题 更多 >
编程相关推荐