回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>给定此数据帧:</p>
<pre class="lang-py prettyprint-override"><code>df
animal location number
0 lions zoo1 10
1 tigers zoo2 200
2 bears zoo2 300
3 ohmy zoo2 400
4 antelopes zoo1 20
5 orangutans zoo2 500
6 zebras zoo1 30
</code></pre>
<p>我需要按动物园找到前三名的动物,独立于动物类型求和,然后排列哪个动物园有最多的动物。我已经到了可以根据地点和动物进行选择和分组的地步,我想我现在需要做的是创建一个系列,以地点为关键,以每个地点的总和为值,但我被卡住了(如果这不是最好的方法,我愿意接受建议。)</p>
<pre class="lang-py prettyprint-override"><code>df.set_index(['location','number'], inplace=True)
df.groupby(level=[0,1]).sum().reset_index().sort_values(['location', 'number'], ascending=[1,0]).groupby('location').head(3)
location number animal
2 zoo1 30 zebras
1 zoo1 20 antelopes
0 zoo1 10 lions
6 zoo2 500 orangutans
5 zoo2 400 ohmy
4 zoo2 300 bears
</code></pre>
<p>(在这种情况下,<code>sum()</code>似乎没有任何作用,但我必须为<code>groupby()</code>准备一些东西,我不知道是否有更好的东西。)我在这里寻找的是:</p>
<pre class="lang-py prettyprint-override"><code>zoo2 1200
zoo1 60
</code></pre>
<p>创建初始df的代码:</p>
<pre class="lang-py prettyprint-override"><code>df = pd.DataFrame({'animal': ['lions', 'tigers', 'bears', 'ohmy', 'antelopes', 'orangutans','zebras'],
'location': ['zoo1', 'zoo2', 'zoo2', 'zoo2', 'zoo1', 'zoo2', 'zoo1'],
'number': [10, 200, 300, 400, 20, 500, 30]})
</code></pre>