在控制台中打印后,我有一个MultiIndex的DataFrame看起来像这样:
value indA indB scenarioId group 2015-04-13 1 A -54.0 1.0 1.0 B -160.0 1.0 1.0 C -15.0 0.0 1.0 2 A -83.0 1.0 1.0 3 A -80.0 2.0 2.0 4 A -270.0 2.0 2.0 2015-04-14 1 A -56.0 1.0 1.0 B -1.0 1.0 1.0 C -60.0 0.0 1.0 2 A -32.0 1.0 1.0 3 A -91.0 2.0 2.0 4 A -17.0 2.0 2.0
我在初始数据集上使用groupby
和sum
函数后得到了它。
我希望保持相同的格式,但请根据value
列进行排序。我已经尽力使用排序函数来做到这一点,但我认为拥有没有名称的MultiIndex的第一个索引(对于日期)是一个问题。
基本上,输出应如下所示:
value indA indB scenarioId group 2015-04-13 1 B -160.0 1.0 1.0 A -54.0 1.0 1.0 C -15.0 0.0 1.0 2 A -83.0 1.0 1.0 3 A -80.0 2.0 2.0 4 A -270.0 2.0 2.0 2015-04-14 1 C -60.0 1.0 1.0 A -56.0 1.0 1.0 B -1.0 0.0 1.0 2 A -32.0 1.0 1.0 3 A -91.0 2.0 2.0 4 A -17.0 2.0 2.0
有人可以告诉我吗?
提前致谢。
答案 0 :(得分:4)
您可以使用sort_values
+ sort_index
:
print (df.sort_values('value').sort_index(level=[0,1], sort_remaining=False))
value indA indB
scenarioId group
2015-04-13 1 B -160.0 1.0 1.0
A -54.0 1.0 1.0
C -15.0 0.0 1.0
2 A -83.0 1.0 1.0
3 A -80.0 2.0 2.0
4 A -270.0 2.0 2.0
2015-04-14 1 C -60.0 0.0 1.0
A -56.0 1.0 1.0
B -1.0 1.0 1.0
2 A -32.0 1.0 1.0
3 A -91.0 2.0 2.0
4 A -17.0 2.0 2.0
另一个解决方案 - sort_values
与reset_index
和set_index
:
df = df.reset_index()
.sort_values(['level_0','scenarioId','value'])
.set_index(['level_0','scenarioId','group'])
print (df)
value indA indB
level_0 scenarioId group
2015-04-13 1 B -160.0 1.0 1.0
A -54.0 1.0 1.0
C -15.0 0.0 1.0
2 A -83.0 1.0 1.0
3 A -80.0 2.0 2.0
4 A -270.0 2.0 2.0
2015-04-14 1 C -60.0 0.0 1.0
A -56.0 1.0 1.0
B -1.0 1.0 1.0
2 A -32.0 1.0 1.0
3 A -91.0 2.0 2.0
4 A -17.0 2.0 2.0