Python pandas dataframe 仅使用行信息而不是列 max min 标准化每一行

标签 python python-3.x pandas

我的数据框当前包含以下设计

来源:

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 函数。 Pandas 还说我们不应该迭代行并更改值:-( 所以我有点迷失并欣赏一些输入。

最佳答案

  1. 从每行中减去最小的元素。
  2. 将该行除以其范围(最大值和最小值之间的差值)。
  3. 如果范围为 0,则除法将产生 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

关于Python pandas dataframe 仅使用行信息而不是列 max min 标准化每一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53899700/

相关文章:

python - 在 Scrapy 中发送帖子请求

Python 脚本在 IDLE 中工作但不能作为 .desktop 图标

python - Pandas 如何用数据帧中的前一个值填充行序列

Python 程序查找 .txt 文件中最常见的单词

Python:如何使用 lxml 解析带句点的 xml 标签?

python - 如果 Rasa 无法识别意图怎么办?

python - Pandas 有条件地选择多列

python - 一维 np 数组 : how to make it more NumPy-thonic? 上切片的平均值

python - Django 创建与现有外键数据库条目相对应的新条目

Python pandas groupby 箱线图重叠