2016-03-21 3 views
0

Я пытаюсь нормализовать мультииндексный фрейм данных: вычесть его среднее значение и делить на его стандартное отклонение. Вот как вы это делаете с обычным (не мультииндексом) dataframe:Нормализовать мультииндексный фрейм данных в pandas

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

Однако с мультииндексным dataframe он не работает: Я получаю эту absurdish ошибки:

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

Так интересно, если есть работа, проще, чем сплющивание и выравнивание индекса?

ответ

3

Используйте subtract и divide методы, так что вы можете определить соответствующую ось операции:

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 
Смежные вопросы