在控制台中打印后,我有一个具有MultiIndex的DataFrame,如下所示:
值indA indB
方案编号组
2015年4月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安-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的第一个索引(用于日期)没有名称的事实是一个问题。
本质上,输出应如下所示:
值indA indB
方案编号组
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安-270.0 2.0 2.0
2015年4月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
有人可以启发我吗?
提前致谢。
最佳答案
您可以使用 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
关于python - 根据列值对具有MultiIndex的pandas DataFrame进行排序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43472125/