我有一个带有分层行的数据帧,这是转置数据透视的结果。第二行索引是一个数字,并按升序排序(这是我想要的),但第一行索引是一个字符串,并按字母顺序排序(我不想要)。同样,列名是字符串,按字母顺序排序,我不想要。
如何重新组织数据框,以便按行我想要的顺序显示行和列?我唯一要做的就是重新命名,在开头添加一个数字,但它很麻烦,如果可能的话,我宁愿避免使用它。
我的数据的最小示例如下所示。
import pandas as pd
import numpy as np
consdf=pd.DataFrame()
for mylocation in ['North','South']:
for scenario in np.arange(1,4):
df= pd.DataFrame()
df['mylocation'] = [mylocation]
df['scenario']= [scenario]
df['this'] = np.random.randint(10,100)
df['that'] = df['this'] * 2
df['something else'] = df['this'] * 3
consdf=pd.concat((consdf, df ), axis=0, ignore_index=True)
mypiv = consdf.pivot('mylocation','scenario').transpose()
我理解已经提出了类似的问题,但我无法将这些解决方案应用于我的多索引。
答案 0 :(得分:2)
函数reindex
就是为了这个,只是适应管理列:
In [1]: mypiv
Out[1]:
mylocation North South
scenario
this 1 24 11
2 19 53
3 11 92
that 1 48 22
2 38 106
3 22 184
something else 1 72 33
2 57 159
3 33 276
In [2]: mypiv.reindex(['that', 'this', 'something else'], level=0) \
.T.reindex(['South','North']).T
Out[2]:
mylocation South North
scenario
that 1 90 34
2 50 104
3 100 170
this 1 45 17
2 25 52
3 50 85
something else 1 135 51
2 75 156
3 150 255