python pandas - 如何将规范化函数应用于数据框列

时间:2016-02-22 21:05:29

标签: python pandas

我有一个pandas数据帧,输出类似于下面的内容:

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

我希望获得每列['value']的标准化值并将其存储在新列['normalized']中,但不确定如何将normalize函数应用于列...

我的规范化功能如下所示:     (['value'] - min ['value'])/(max ['value'] - min ['value']

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

很抱歉,如果我的术语不对,但我是python的新手,尤其是熊猫!

3 个答案:

答案 0 :(得分:3)

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

>>> (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 - ....

答案 1 :(得分:2)

让我们调用您的DataFrame DF。

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

诀窍。

答案 2 :(得分:1)

我会考虑使用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”方法的美妙之处在于,您可以随心所欲地调整您的函数,这些(我认为无论如何)更好地划分代码,允许重用 - 这总是一件好事。