python描述了如何将normalise函数应用于dataframe列

2024-06-28 14:57:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个pandas数据帧,输出如下:

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

我想得到每个列的规范化值['value']并将其存储在一个新列['normalized']中,但不知道如何将normalise函数应用于列。。。在

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

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

抱歉,如果我弄错了术语,但我是python的新手,尤其是pandas!在


Tags: 数据函数dataframepandasindexvaluetransformmin
3条回答

我会考虑使用lambda/apply方法,我相信您可以使用它,这需要提前确定最小值和最大值。在

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

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

接下来,从数据帧收集全局值:

^{pr2}$

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

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”方法的好处是,你可以随意调整你的函数,这(在我看来)可以更好地划分代码,允许重用——这总是一件好事。在

把你的数据帧称为DF。在

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

就这样。在

这些是相当标准的列操作:

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

你可以简单地写

^{pr2}$

相关问题 更多 >