2016-12-21 4 views
0

私はPandasのMultiIndexとは何ですか?私はMultiIndexを持っていないとPandasが言っているのはなぜですか?

df.groupby(level = 1,'Amount($m)).sum() 

としてグループ私のマルチインデックスにしようとしている。しかし、私はレベル> 0はマルチインデックスでのみ有効であること、エラーを取得しています。私はdf.infoを(呼び出し )誰かが私が欠けているかを説明することができます私は

class 'pandas.core.frame.DataFrame' 

を取得するが、私はdf.columnsを印刷するとき、私は

MultiIndex(levels=[[u'MSS', u'MLLN', u'AMS'], [u'Trades', u'Resolved Trades'], [u'Amount($m)', u'Trades', u'Resolved Trades']], 
     labels=[[0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2], [0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1], [1, 0, 2, 0, 1, 0, 2, 0, 1, 0, 2, 0]], 
     names=[u'Entity', None, None]) 

を取得しますか?

+0

選択することができますか?誤った引用があります。 – IanS

+0

列には複数のレベルがあり、MultiIndexオブジェクトです。しかし、あなたのインデックスは(明らかに)マルチインデックスではありません。 'print(df.index)'を試してください。 – IanS

答えて

2

パンダのデータフレームには2つのインデックスオブジェクトがあります。列の1つ(データの上)と行の1つ(データの左側)。 groupbyメソッドのデフォルト値は、1つまたは複数の列の値でグループ化することです。ただし、行インデックスのレベルのいずれかの値でグループ化しようとしました。あなたの行インデックスは1レベル(レベル0)しかないので、エラーを受け取りました。

列MultiIndexオブジェクトの最下位レベルで列名自体を別の方向にグループ化したいと思われるようです。軸のパラメータを1に変更してレベル2を選択してみてください。これはあなたが探しているものではないかもしれません。より多くのデータを提供することは役に立ちます。

df.groupby(level=2, axis=1).sum() 

ここには、see in the the documentationのような人為的な例があります。

# create multiindex and random data 
iterables = [[u'MSS', u'MLLN', u'AMS'], 
      [u'Trades', u'Resolved Trades'], 
      [u'Amount($m)', u'Trades', u'Resolved Trades']] 


idx = pd.MultiIndex.from_product(iterables) 

df = pd.DataFrame(np.random.randn(3, len(idx)), index=['A', 'B', 'C'], columns=idx) 
print(df) 

     MSS              \ 
     Trades       Resolved Trades    
    Amount($m) Trades Resolved Trades  Amount($m) Trades 
A 0.776702 1.731951  0.474472  0.371514 0.023242 
B -1.907887 0.347118  0.911265  -0.044541 -0.245793 
C -1.126279 -1.917745  0.000187  0.368609 -0.742214 

         MLLN           \ 
         Trades       Resolved Trades 
    Resolved Trades Amount($m) Trades Resolved Trades  Amount($m) 
A  0.287962 -0.812814 0.410907  -0.263261  -0.059534 
B  0.088943 0.260369 -0.065651  0.494519  -0.358993 
C  -0.765357 -0.645231 0.409186  -0.240529  1.440578 

            AMS       \ 
           Trades        
    Trades Resolved Trades Amount($m) Trades Resolved Trades 
A -0.719607  0.948184 -0.063318 -0.715459  -1.252230 
B -0.047890  0.573863 -1.961252 1.661206  1.385927 
C -1.340498  -0.394141 -0.815319 -0.150870  -0.482750 


    Resolved Trades        
     Amount($m) Trades Resolved Trades 
A  -0.310624 -1.201535  0.467134 
B  -0.151055 0.606990  -0.485391 
C  0.130125 1.262464  -2.287201 

それから私が書いた最初のステートメントを実行します。

df.groupby(level=2, axis=1).sum() 

出力最後に

Amount($m) Resolved Trades Trades 
A -0.098074   0.662263 -0.470501 
B -4.163359   2.969126 2.255981 
C -0.647517  -4.169791 -2.479675 

を、あなたは、コードのあなたの最初の行を修正することができますちょうどAmount($m)

関連する問題