【问题标题】:python pandas - how to apply a normalise function to a dataframe columnpython pandas - 如何将规范化函数应用于数据框列
【发布时间】:2016-06-04 11:32:00
【问题描述】:

我有一个 pandas 数据框,输出类似于下面:

index    value
0    5.95
1    1.49
2    2.34
3    5.79
4    8.48

我想获取每列['value']的归一化值并将其存储在新列['normalised']中,但不确定如何将归一化函数应用于列...

我的标准化函数如下所示: (['value'] - min['value'])/(max['value'] - min['value']

我知道我可能应该使用 apply 或 transform 函数将新列添加到数据框,但不确定如何将规范化函数传递给 apply 函数...

对不起,如果我弄错了术语,但我是 python 的新手,尤其是 pandas!

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    让我们调用你的 DataFrame DF。

    DF['normalised'] = (DF['value']-min(DF['value']))/(max(DF['value']-min(DF['value'])
    

    成功了。

    【讨论】:

    • 这对你传递给minmax 的类型不起作用,它们是pandas Series,这将引发ValueError,因为类型是类似数组的,所以赢了'不理解这种类型
    【解决方案2】:

    这些是非常标准的列操作:

    >>> (df.value - df.value.min()) / (df.value.max() - df.value.min())
    0    0.638054
    1    0.000000
    2    0.121602
    3    0.615165
    4    1.000000
    Name: value, dtype: float64
    

    你可以简单地写

    df['normalized'] = (df.value - ....
    

    【讨论】:

      【解决方案3】:

      我会考虑用户使用 lambda/apply 方法,我相信您将能够巧妙地使用它,这需要提前确定最小值和最大值。

      首先,编写一个函数,该函数根据一些“全局”参数和从数据行获取的输入值输出一个值。

      def norm(vmax, vmin, val):
          return (val-vmin)/(vmax-vmin)
      

      接下来,从数据框中收集您的全局值:

      val_min = df['value'].min()
      val_max = df['value'].max()
      

      最后,您可以应用该函数,创建一个新字段来保存结果:

      df['new_field'] = df.apply(lambda row : norm(val_min,val_max,row['value']),axis=1)
      
      df
          value   new_field
      0   5.95    0.361946
      1   1.49    1.000000
      2   2.34    0.878398
      3   5.79    0.384835
      4   8.48    -0.000000
      

      使用这种“lambda”方法的美妙之处在于,您可以随意调整您的函数,这(在我看来无论如何)可以更好地划分代码,允许重用 - 这总是一件好事。

      【讨论】:

        猜你喜欢
        • 2012-10-31
        • 1970-01-01
        • 2020-12-15
        • 1970-01-01
        • 2021-02-03
        • 2013-02-09
        相关资源
        最近更新 更多