【发布时间】:2021-03-16 07:00:20
【问题描述】:
我有一个DF,如下所示:
ECON1 ECON2 ECON3 FOOD1 FOOD2 FOOD3 ENV1 \
28 0.310071 0.096913 0.228500 0.234986 0.260894 0.267858 0.489309
28 0.353609 0.045075 0.222571 0.222803 0.248388 0.330560 0.060107
28 0.280600 0.170201 0.232027 0.226792 0.233379 0.316765 0.114550
28 0.299062 0.127866 0.198080 0.189948 0.222982 0.327082 0.052881
ENV2 HEA1 HEA2 HEA3 PERS1 PERS2 PERS3 \
28 0.206320 0.252537 0.266968 0.248452 0.184450 0.093345 0.173952
28 -0.206570 0.263673 0.126182 0.265908 0.134481 0.191341 0.113324
28 0.237818 0.257337 0.102037 0.214423 0.159002 0.321451 0.165960
28 0.345857 0.272412 0.069192 0.251301 0.130606 0.132732 0.174925
COM1 COM2 POL1 POL2
28 0.781430 0.487822 0.361886 0.233124
28 0.083918 0.005381 0.266604 0.237078
28 0.395897 0.257888 0.330607 0.229079
28 0.000000 0.000000 0.307907 0.238908
这个DF 是归一化的结果,如下所示:
DF.apply(lambda x: x / np.linalg.norm(x), axis=0)
我的问题是这种类型的标准化不能保证非负值。我本可以使用:
DF.apply(lambda x: (x - x.min() )/ (x.max() - x.min()), axis=0)
但这里的问题是我得到的列都是zeros 或所有ones。当您尝试使用这些值(进行因子分析或相关性分析)时,它们看起来是常数,而实际上不是,这些只是标准化过程的结果。
有没有办法在保证数据的积极性和可变性的同时进行规范化?
【问题讨论】:
标签: python-3.x dataframe normalization