web-dev-qa-db-ja.com

パンダのMultiIndexで.locを使用していますか?

DataFrame.locメソッドを使用してMultiIndexから選択できるかどうかは誰にもわかりますか?次のDataFrameがあり、('at', 1)('at', 3)('at', 5)などのインデックスで 'Dwell'列にある値にアクセスできるようにしたい(非-シーケンシャル)。

data.loc[['at',[1,3,5]], 'Dwell']のような、通常のインデックスのdata.loc[[1,3,5], 'Dwell']構文(3メンバーのDwell値のシリーズを返す)に似たようなことができるようになりたいです。

私の目的は、データの任意のサブセットを選択し、そのサブセットのみで何らかの分析を実行し、分析の結果で新しい値を更新することです。同じ構文を使用してこれらのデータの新しい値を設定する予定なので、この場合セレクターのチェーンは実際には機能しません。

これが、私が使用しているDataFrameのスライスです。

         Char    Dwell  Flight  ND_Offset  Offset
QGram                                                           
at    0     a      100     120   0.000000       0  
      1     t      180       0   0.108363       5  
      2     a      100     120   0.000000       0 
      3     t      180       0   0.108363       5 
      4     a       20     180   0.000000       0  
      5     t       80     120   0.108363       5
      6     a       20     180   0.000000       0   
      7     t       80     120   0.108363       5  
      8     a       20     180   0.000000       0  
      9     t       80     120   0.108363       5   
      10    a      120     180   0.000000       0  

ありがとう!

28
kronosapiens

バージョン0.14を使用している場合は、次のように.locにTupleを渡すだけで済みます。

df.loc[('at', [1,3,4]), 'Dwell']
35
chrisb

cross-section インデックス作成を試してください:

In [68]: df.xs('at', level='QGram', drop_level=False).loc[[1,4]]
Out[68]: 
        Char  Dwell  Flight  ND_Offset  Offset
QGram                                         
at    1    t    180       0   0.108363       5
      4    a     20     180   0.000000       0
12
Rolando Max