godKnoows 2023-03-20 21:04 采纳率: 75%
浏览 9

Python对长浮点数使用z分数后均值不为0

最近我遇到一个大问题,就是对于很长的浮点数进行标准化时(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]))

img

  • 写回答

2条回答 默认 最新

  • godKnoows 2023-03-20 21:23
    关注
    print(df.sort_values(by=["r","A"], ascending=[False,True], key=lambda x: round(x,3)))
    

    img


    以上是我暂时的解决方法,在排序时,将数据保留到3位小数,这样使得,本来应当相等的值变得相等,使得后面的排序依据可以正常判定

    还有没有其他的方法呀,比如说能否直接从源头解决这个长浮点数的标准化问题?

    评论

报告相同问题?

问题事件

  • 创建了问题 3月20日

悬赏问题

  • ¥15 metamask如何添加TRON自定义网络
  • ¥66 关于川崎机器人调速问题
  • ¥15 winFrom界面无法打开
  • ¥30 crossover21 ARM64版本安装软件问题
  • ¥15 mymetaobjecthandler没有进入
  • ¥15 mmo能不能做客户端怪物
  • ¥15 osm下载到arcgis出错
  • ¥15 Dell g15 每次打开eiq portal后3分钟内自动退出
  • ¥200 使用python编写程序,采用socket方式获取网页实时刷新的数据,能定时print()出来就行。
  • ¥15 matlab如何根据图片中的公式绘制e和v的曲线图