规范化熊猫中的多索引数据帧



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

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

但是,对于多索引数据帧,它不起作用:我得到了这个荒谬的错误:

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

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

使用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

最新更新