我用它来计算我的数据框的 z 分数:
df_z=df.apply(zscore)
有没有逆向运算可以给我原始值?
没有内置方法可以从 df_z(z 分数)返回到 df(原始值)。但是,您可以相当轻松地做到这一点,如下所示:
第 1 步:跟踪所有原始变量的平均值和标准差。 也许是这样的:
mean_std={}
for var in df.columns:
mean_std[var]=(df[var].mean(), df[var].std())
第 2 步:转换回 z 分数
def reverse_zscore(pandas_series, mean, std):
'''Mean and standard deviation should be of original variable before standardization'''
yis=pandas_series*std+mean
return yis
original_mean, original_std = mean_std[var]
original_var_series = reverse_zscore(df_z[var], original_mean, original_std)
或者,只需将原始数据框存储在某处
您可以使用 SciKit Learn 中的 StandardScaler,它基本上会为您执行上述逻辑。 由于名称并不表明 StandardScaler 是 Z 评分类别。
所以
from sklearn.preprocessing import StandardScaler
zscore = StandardScaler()
# Do the scoring
out = zscore.fit_transform(x)
# Do the reverse
x = zscore.inverse_transform(out)