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
中使用 Col1
和 Col2
获取多索引。我不确定如何解决上述问题。
我的预期输出应该是:
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)
我有一个数据框 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
中使用 Col1
和 Col2
获取多索引。我不确定如何解决上述问题。
我的预期输出应该是:
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)