2017-07-10 4 views
2

マルチインデックス列DataFrameに新しい列を追加すると、新しい列がDataFrameの末尾に追加されるという問題が発生しています。例えば:pandas multiindex列の再編成

Group 1   | Group 2  | Group 1 | Group 2 | 
------------------------------------------------------ 
Sub 1 | Sub 2 | Sub 1 | Sub 2 | New Sub | New Sub | 

私が何をしたい一方である:

Group 1     | Group 2     | 
------------------------------------------------------ 
Sub 1 | Sub 2 | New Sub | Sub 1 | Sub 2 | New Sub | 

は再グループ/これを行うには、私のマルチインデックスを注文するが方法ですか?注:私は、名前でサブグループを並べ替えることは望ましくありません.New Subは最後に移動する必要があり、アルファベット順で正しくソートされない可能性があります。

+0

あなたがそれを設定するにはどうすればよいですか? –

答えて

2

を私はあなたがカスタムlistによってreindexまたはreindex_axisが必要だと思う:

df1=pd.DataFrame(columns=pd.MultiIndex.from_product((('C','R', 'A'),(1,2))), 
       data=np.arange(6).reshape(1,-1)) 
df2=pd.DataFrame(columns=pd.MultiIndex.from_tuples((('C','3'),('R',5),('A',4))), 
       data=[[9,9,4]]) 
df=df1.join(df2) 
print (df) 
    C  R  A  C R A 
    1 2 1 2 1 2 3 5 4 
0 0 1 2 3 4 5 9 9 4 

df1 = df.reindex(columns = ['C','R','A'], level=0) 
print (df1) 
    C  R  A  
    1 2 3 1 2 5 1 2 4 
0 0 1 9 2 3 9 4 5 4 

df1 = df.reindex_axis(['C','R','A'], level=0, axis=1) 
print (df1) 
    C  R  A  
    1 2 3 1 2 5 1 2 4 
0 0 1 9 2 3 9 4 5 4 
+0

jezrael、アプローチ1と2の違いは何ですか? –

+1

私は何も考えていません。 – jezrael

+0

個人的に私はreindex_axisがもっと好きですが、理由を説明することはできません; – jezrael

2

あなただけの設定後df.sort_indexを呼び出す必要があり:

df1=pd.DataFrame(columns=pd.MultiIndex.from_product((('a','b'), 
(1,2))),data=np.arange(4).reshape(1,-1)) 
df2=pd.DataFrame(columns=pd.MultiIndex.from_tuples((('a','3'),('b',5))),data=[[9,9]]) 
df=df1.join(df2) 

# a  b  a b 
# 1 2 1 2 3 5 
# 0 0 1 2 3 9 9 

df.sort_index(axis=1,inplace=True) 

# a  b  
# 1 2 3 1 2 5 
# 0 0 1 9 2 3 9 
+0

これは整数データに対しては機能しません。 –

関連する問題