规范化pandas中的多索引数据帧

时间:2016-03-21 03:06:46

标签: python pandas

我正在尝试规范化多索引数据帧:减去它的平均值并除以其标准差。这就是你使用普通(非多索引)数据帧的方法:

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

然而,使用multiindex数据帧它不起作用:我得到了这个荒谬的错误:

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

所以我想知道是否有解决方法,比扁平化和去展平索引更简单?

1 个答案:

答案 0 :(得分: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