【发布时间】:2018-12-23 06:37:59
【问题描述】:
我的数据框目前包含以下设计
来源:
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 数据框,我看不到任何 Python 式的东西,而且我如何在没有复杂的 lambda 函数的情况下轻松实现它,并在每行之前存储最小最大值。 Pandas 还说我们不应该遍历行并更改值 :-( 所以我有点迷茫并感谢一些输入。
【问题讨论】:
-
@TheMaster 哦,对不起... Source 是我拥有的 pandas 数据帧的打印,Target 是我想要实现的 pandas 数据帧
-
@TheMaster 我猜你的意思是 df = (df - df.row_min()) / (df.row_max() - df.row_min()) * 1 ..... all in所有每一行最后都至少包含一个 0 ,很可能是一个 1 (如果不是所有值都是 0,则相同),所有其他值都在 0 和 1 之间
标签: python python-3.x pandas