<p>您可以使用双<a href="http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.reset_index.html" rel="nofollow noreferrer">^{<cd1>}</a>-首先删除不必要的级别(这里仅使用<code>2</code>,因为<a href="http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.groupby.html" rel="nofollow noreferrer">^{<cd4>}</a>中的<code>group_keys=False</code>删除另一个级别),然后使用<code>name='new'</code>将<code>Series</code>转换为<code>DataFrame</code>并设置新列名:</p>
<pre><code>df = pd.DataFrame({'application':list('abbddedcc'),
'id':list('aaabbbbbb')})
print (df)
application id
0 a a
1 b a
2 b a
3 d b
4 d b
5 e b
6 d b
7 c b
8 c b
</code></pre>
<hr/>
<pre><code>top = 2
df1 = (df.groupby(['id', 'application'])['id']
.value_counts()
.groupby(['id'], group_keys=False)
.nlargest(top)
.reset_index(level=2, drop=True)
.reset_index(name='new'))
print (df1)
id application new
0 a b 2
1 a a 1
2 b d 3
3 b c 2
</code></pre>
<p>或者从第一个<code>groupby</code>中删除<code>id</code>,而不是用实际数据测试相同的输出:</p>
<pre><code>top = 2
df1 = (df.groupby(['application'])['id']
.value_counts()
.groupby(['id'], group_keys=False)
.nlargest(top)
.reset_index(name='new'))
print (df1)
application id new
0 b a 2
1 a a 1
2 d b 3
3 c b 2
</code></pre>