我正在尝试规范化多索引数据帧:减去它的平均值并除以其标准差。这就是你使用普通(非多索引)数据帧的方法:
df4 = (df4-df4.mean(1)) / df.std(1)
然而,使用multiindex数据帧它不起作用:我得到了这个荒谬的错误:
ValueError: cannot join with no level specified and no overlapping names
所以我想知道是否有解决方法,比扁平化和去展平索引更简单?
答案 0 :(得分: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