我的数据框目前包含以下设计
来源:
index col1 col2 col3
row1 100 50 0
row2 -100 50 -25
row3 0 0 0
row4 -1 -1 -1
row5 1 1 1
row6 -100 0 1
我的目标是
index col1 col2 col3
row1 1.0 0.5 0.0
row2 0 1 0.5
row3 0 0 0
row4 0 0 0
row5 0 0 0
row6 0 0.99 1
我从Stackoverflow答案中尝试了什么:
规范化列的最大值而不是行的最大值/最小值
df = (df.T / df.T.sum()).T
规范化列的最大值而不是行的最大值/最小值
df = df.div(df.sum(axis=1), axis=0)
规范化列的最大值而不是行的最大值/最小值
df.iloc[:,:] = Normalizer(norm='l2').fit_transform(df)
我确实尝试更改:
df.div(df.sum(axis=1), axis=0)
并使用该轴,很遗憾,一旦我更改任何轴,它就会引发错误。
从读取内置函数的pandas数据帧时,我看不到任何pythonic内容,并且很容易在没有应用复杂的lambda函数的情况下实现这一点,因为每行之前都存储了min max值。 熊猫还说,我们不应该遍历行并更改值:-(因此我有点迷失了,感谢您的投入。
答案 0 :(得分:2)
NaN
。用原始值填充它们。代码:
df.subtract(df.min(axis=1), axis=0)\
.divide(df.max(axis=1) - df.min(axis=1), axis=0)\
.combine_first(df)
# col1 col2 col3
#row1 1.0 0.500000 0.0
#row2 0.0 1.000000 0.5
#row3 0.0 0.000000 0.0
#row4 -1.0 -1.000000 -1.0
#row5 1.0 1.000000 1.0
#row6 0.0 0.990099 1.0