2016-12-19 6 views
1

I有する構造パンダのデータフレーム内のマルチインデックスレベルのソート

マルチインデックス(レベル= [U '総計'、u'MSND」、u'MQWと次ピボットテーブル

     MQW    MSND   Grand Total  
        Amount($m)  Amount($m)   Amount($m)  
        Total Count  Total Count  Total Count 
Margin Call Date              
2016-12-06   16.99  4  8.50  6  25.50 10 
2016-12-07   11.24  4  8.55  6  19.79 10 
2016-12-08    4.21  5  8.28  6  12.49 11 
2016-12-09   23.29  7  8.08  6  31.37 13 
2016-12-12    0.29  1  8.73  6   9.02  7 
Total    56.03 21  42.14 30  98.18 51 

']、[u'Amount($ m)']、[u'Count '、u'Total']]、labels = [[2,2,1,1,0,0]、[0、0、0 、0,0,0]、[1,0,1,0,1,0]])

私の人生のために、私は 'カウント'と '合計'の列を切り替えることができません'MQW'、 'MSND'、 'Grand Total'の順番を逆にすることなく、.sortlevelメソッドを使用します。私も 'sort_remaining' = Falseに設定しようとしましたが、動作しません。これは私が得ようとしているものです。

     MQW    MSND   Grand Total  
        Amount($m)  Amount($m)   Amount($m)  
        Count Total  Count Total  Count Total 
Margin Call Date              
2016-12-06   13.99  4  7.50  6  35.50 10 
2016-12-07    1.24  4  16.55 6   9.79 10 
2016-12-08    7.21  5  0.28  6  22.49 11 
2016-12-09   33.29  7  9.08  6  21.37 13 
2016-12-12    0.29  1  8.73  6   9.02  7 
Total    56.03 21  42.14 30  98.18 51 

ご協力いただければ幸いです。

+0

はdf.sort_index(レベル= [1,0]、軸= 1)をやってみて、これが動作しない場合は、強引につながることができますマルチインデックスの選択。手作業で各列を選択するだけの並べ替えはありません。 –

答えて

1

次の解決策が機能します。しかし、私はいくつかのより簡単な選択肢が可能であると信じています。

まず、このようなレベル2ラベル反転新しいインデックス作成:ラベルのコードを変更する

idx = df.columns 
new_idx1 = idx.set_levels(idx.levels[2][::-1], level=2) 

# or, equivalently, 
# new_idx1 = idx.set_levels(['Total', 'Count'], level=2) 

または多分よりよく:

new_idx2 = idx.set_labels(labels=[0, 1] * 3, level=2) 

注内部構造そのnew_idx2は、同じであるように見えますが、new_idx1とは異なります。 (それらに適用されるsortlevelの結果が異なります。)

またpd.MultiIndexpd.MultiIndex.from_arraysまたはpd.MultiIndex.from_tuplesと最初からnew_idxを作成することができます。

例えば今REINDEX、:

df_sorted = df.reindex(columns=new_idx2) 
df_sorted 
Out[337]: 
        MQW    MSND   Grand Total  
      Amount($m)  Amount($m)   Amount($m)  
       Count Total  Count Total  Count Total 
2016-12-06   4 13.99   6 7.50   10 35.50 
2016-12-07   4 1.24   6 16.55   10 9.79 
2016-12-08   5 7.21   6 0.28   11 22.49 
2016-12-09   7 33.29   6 9.08   13 21.37 
2016-12-12   1 0.29   6 8.73   7 9.02 
Total    21 56.03   30 42.14   51 98.18 
関連する問題