回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我有一个数据帧:</p>
<pre><code>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
</code></pre>
<p>我想从大约的数据中找出最大射程的前2只鸟。你知道吗</p>
<p>我使用了<code>groupby</code>操作,如下所示:</p>
<pre><code>df.groupby(['bird','bird2']).agg({'range':'max', 'n':'first'}).reset_index().sort_values('range', ascending=False).head(2)
</code></pre>
<p>输出为:</p>
<pre><code> bird bird2 range n
1 eagle 2 3300.0 c
2 shikra 1 1600.0 a
</code></pre>
<p>以上输出的唯一问题是<code>column n</code>。因为我在<code>agg</code>中选择了<code>first</code>,它给出了相应groupby值的第一个值,但实际上我想要的是<code>n</code>的值,它与最大范围有关。你知道吗</p>
<p>如何从<code>n</code>列中选择值,其中<code>range</code>是<code>max</code></p>
<p><strong>预期输出:</strong></p>
<pre><code> bird bird2 range n
1 eagle 2 3300.0 e
2 shikra 1 1600.0 b
</code></pre>