Pandas groupby 在 as_index=True 时添加额外的数字

Pandas groupby adding additional number when as_index=True

我有一个数据框 df 如下:

df.to_dict()
Out[24]: 
{'Col1': {0: 'A', 1: 'A', 2: 'B', 3: 'B', 4: 'B'},
 'Col2': {0: 'a', 1: 'a', 2: 'b', 3: 'b', 4: 'c'},
 'Col3': {0: 42, 1: 28, 2: 56, 3: 62, 4: 48}}

我正在尝试以下操作:

df2 = df.sort_values('Col3', ascending=False).groupby(['Col1', 'Col2'], as_index=True).apply(lambda x: x.head(1)) 

但是,df2 的索引添加了一个额外的索引变量以显示以下内容:

df2.index
Out[26]: 
MultiIndex([('A', 'a', 0),
            ('B', 'b', 3),
            ('B', 'c', 4)],
           names=['Col1', 'Col2', None])

我只需要在 df2 中使用 Col1Col2 获取多索引。我不确定如何解决上述问题。

我的预期输出应该是:

df2.index
Out[26]: 
MultiIndex([('A', 'a'),
            ('B', 'b'),
            ('B', 'c')],
           names=['Col1', 'Col2'])

编辑:

我需要使用 head() 方法,因为我有另一个场景将实施 head(4)

使用first

df.sort_values('Col3', ascending=False).groupby(['Col1', 'Col2'], as_index=True).first()

修复您的代码reset_index(level=2,drop=True)

df2 = df.sort_values('Col3', ascending=False).groupby(['Col1', 'Col2'], as_index=True).apply(lambda x: x.head(1)).reset_index(level=2,drop=True)