最近我遇到一个大问题,就是对于很长的浮点数进行标准化时(z分数),标准化后的均值不为0!
这导致我后续基于此标准化值进行的指标构建可能不能准确的比较大小!
求解决~
import pandas as pd
import math
df = pd.DataFrame(data=[[1.16482132131231231248,1.211],
[-52.2123123123123,5.123123]],
columns=["A","B"])
# 标准化
df["A_zScore"] = [(x-df["A"].mean(0))/df["A"].std(0) for x in df["A"].values]
df["B_zScore"] = [(x-df["B"].mean(0))/df["B"].std(0) for x in df["B"].values]
# 任意公式构造一个指标
df["r"] = [(x1**2+x2**2)**0.5 for x1,x2 in zip(df["A_zScore"].values,df["B_zScore"].values)]
print("\n",df)
# 结果发现均值不为0
print(df["A_zScore"].mean())
print(df["B_zScore"].mean())
# 这导致我后续基于该标准化值计算的各种指标无法正常比较大小
print(df.iloc[0,4] > df.iloc[1,4])
# 也就导致了排序失效
print(df.sort_values(by=["r","A"], ascending=[False,True]))