2017-07-25 11 views
2

ピボットテーブルに2つの「行ラベル」(Excel用語)を配置した後、ピボットテーブルの値を降順でソートしようとしています。ピボットテーブルのソート(マルチインデックス)

サンプルデータ:の値によって、次に、すなわち

pt = pd.pivot_table(x, index = ['col1', 'col2'], values = 'col3', aggfunc = np.sum) 
print(pt) 
      col3 
col1 col2  
a 1  1.67 
    2  0.75 
    3  0.50 
b 1  0.50 
    2  2.25 
    3  2.00 
c 1  2.65 
    2  2.50 
    3  2.75 

、この変数ptが最初col1でソートされ:

x = pd.DataFrame({'col1':['a','a','b','c','c', 'a','b','c', 'a','b','c'], 
        'col2':[ 1, 1, 1, 1, 1, 2, 2, 2, 3, 3, 3], 
        'col3':[ 1,.67,0.5, 2,.65, .75,2.25,2.5, .5, 2,2.75]}) 
print(x) 
    col1 col2 col3 
0  a  1 1.00 
1  a  1 0.67 
2  b  1 0.50 
3  c  1 2.00 
4  c  1 0.65 
5  a  2 0.75 
6  b  2 2.25 
7  c  2 2.50 
8  a  3 0.50 
9  b  3 2.00 
10 c  3 2.75 

私は次の関数を使用している、ピボットを作成しますcol2内、col1内、col3内、これは素晴らしいですが、col2に分割されたグループを維持しながら、col3(値)の並べ替えを行いたいと考えています(この列は任意の順序で並べ替えることができます)。私は以下のコードを試してみましたが、これは単に全体のピボットをソート

    col3 
    col1 col2  
    a  1  1.67 
      2  0.75 
      3  0.50 

    b  2  2.25 
      3  2.00 
      1  0.50 

    c  3  2.75 
      1  2.65 
      2  2.50 

ターゲット出力は、この(col1のそのグループにcol2で任意の順序で降順でcol3)のようになります。グループ値を失います(私はグループ内のソートを探しています)。ガイダンスについて

pt.sort_values(by = 'col3', ascending = False) 

、同様の質問を尋ねた(と答え)ここでは、私が提供される出力で成功した出力を取得できませんでしたした

Pandas: Sort pivot table

私はそれから取得エラー答えはcol1col3と最後によってsort_valuesそして、あなたがDataFrameためreset_indexが必要ValueError: all keys need to be the same shape

答えて

1

です(MultiIndex):

df = df.reset_index() 
     .sort_values(['col1','col3'], ascending=[True, False]) 
     .set_index(['col1','col2']) 

print (df) 
      col3 
col1 col2  
a 1  1.67 
    2  0.75 
    3  0.50 
b 2  2.25 
    3  2.00 
    1  0.50 
c 3  2.75 
    1  2.65 
    2  2.50 
関連する問題