python pandas 排序_Python Pandas按多重索引和列排序

在Pandas 0.17中,我尝试按特定列进行排序,同时保持分层索引(A和B)。 B是通过串联设置数据帧时创建的运行编号。我的数据是这样的:Python Pandas按多重索引和列排序

C D

A B

bar one shiny 10

two dull 5

three glossy 8

foo one dull 3

two shiny 9

three matt 12

这就是我需要:

C D

A B

bar two dull 5

three glossy 8

one shiny 10

foo one dull 3

three matt 12

two shiny 9

下面是我使用的代码和结果。注意:Pandas 0.17警告dataframe.sort将被弃用。

df.sort_values(by="C", ascending=True)

C D

A B

bar two dull 5

foo one dull 3

bar three glossy 8

foo three matt 12

bar one shiny 10

foo two shiny 9

添加.groupby产生相同的结果:

df.sort_values(by="C", ascending=True).groupby(axis=0, level=0, as_index=True)

类似地,在切换到第一分拣索引,然后GROUPBY列不是卓有成效:

df.sort_index(axis=0, level=0, as_index=True).groupby(C, as_index=True)

我不能肯定关于重新索引我需要保留第一个索引A,第二个索引B可以重新分配,但不一定要。如果没有简单的解决方案,我会感到惊讶;我想我只是没有找到它。任何建议表示赞赏。

编辑:在我丢弃所述第二索引乙同时,重新分配第一索引A至是列而不是索引排序的多个列,然后重新索引它:

df.index = df.index.droplevel(1)

df.reset_index(level=0, inplace=True)

df_sorted = df.sort_values(["A", "C"], ascending=[1,1]) #A is a column here, not an index.

df_reindexed = df_sorted.set_index("A")

还是很冗长。

你可能感兴趣的:(python,pandas,排序)