我有一个数据框,其中包含要分组的列,并按列值排序。在groupby之后,我发现有多个索引,其中一个是原始数据帧的索引,我想删除该索引。
示例数据框:
> d = pd.DataFrame(np.array([[0, 0, 1, 1, 2, 2, 2],
[3, 4, 5, 6, 7, 8, 9],
[1.25, 10.1, 2.3, 2.4, 1.2, 5.5, 5.7]]).T,
columns=['a', 'b', 'c'])
> d
a b c
0 0.0 3.0 1.25
1 0.0 4.0 10.10
2 1.0 5.0 2.30
3 1.0 6.0 2.40
4 2.0 7.0 1.20
5 2.0 8.0 5.50
6 2.0 9.0 5.70
我要应用的功能:
def top_all(df,column='b'):
return df.sort_index(by=column,ascending=True)
我如何使用groupby:
d.groupby('a').apply(top_all)
我得到的结果:
a b c
a
0.0 0 0.0 3.0 1.25
1 0.0 4.0 10.10
1.0 2 1.0 5.0 2.30
3 1.0 6.0 2.40
2.0 4 2.0 7.0 1.20
5 2.0 8.0 5.50
6 2.0 9.0 5.70
我想要这样的结果:
a b c
a
0.0 0.0 3.0 1.25
0.0 4.0 10.10
1.0 1.0 5.0 2.30
1.0 6.0 2.40
2.0 2.0 7.0 1.20
2.0 8.0 5.50
2.0 9.0 5.70
已更新:
我尝试了reset_index
级别,但结果不包含级别。我想要的结果为groupby
格式,这意味着列a
的值应在索引中分成不同的组。我不知道我是否清楚...
> d.groupby('a').apply(top_all).reset_index(level=1, drop=True)
> d
a b c
a
0.0 0.0 3.0 1.25
0.0 0.0 4.0 10.10
1.0 1.0 5.0 2.30
1.0 1.0 6.0 2.40
2.0 2.0 7.0 1.20
2.0 2.0 8.0 5.50
2.0 2.0 9.0 5.70