我有一个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的新手,尤其是熊猫!
答案 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”方法的美妙之处在于,您可以随心所欲地调整您的函数,这些(我认为无论如何)更好地划分代码,允许重用 - 这总是一件好事。