2016-03-21 12 views
0

マルチインデックスデータフレームを正規化しようとしています。平均を差し引いて標準偏差で除算します。それはあなたが(マルチインデックスではない)通常のデータフレームでそれを行う方法は次のとおりです。パンダのマルチインデックスデータフレームを正規化

df4 = (df4-df4.mean(1))/df.std(1) 

しかし、マルチインデックスのデータフレームと、それは動作しません:私はこのabsurdishエラーを取得しています:

ValueError: cannot join with no level specified and no overlapping names 

だから私はかしらインデックスを平坦化したり平坦化したりするより簡単な回避策がありますか?

答えて

3

あなたは、操作の適切な軸を指定することができるようにsubtractdivideメソッドを使用します。たとえば

df.subtract(mean, axis=0).divide(std, axis=0) 

を、

import numpy as np 
import pandas as pd 
np.random.seed(2016) 

arrays = [['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'], 
      ['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']] 

df = pd.DataFrame(np.random.randint(10, size=(8,3)), index=arrays) 
mean = df.mean(axis=1) 
std = df.std(axis=1) 
print(df.subtract(mean, axis=0).divide(std, axis=0)) 

利回り

   0   1   2 
bar one -0.377964 1.133893 -0.755929 
    two -0.755929 1.133893 -0.377964 
baz one 0.000000 -1.000000 1.000000 
    two -0.800641 1.120897 -0.320256 
foo one -0.164957 -0.907265 1.072222 
    two -1.154701 0.577350 0.577350 
qux one -0.577350 1.154701 -0.577350 
    two -0.377964 1.133893 -0.755929 
関連する問題