我想基于对现有特征值的一些操作来创建一个附加特征(列)

数据挖掘 特征工程 特征构造
2022-03-12 00:35:42

考虑我的数据框是这样的('x','y','z'是特征):

在此处输入图像描述

我想创建一个python 函数,它将表达式作为字符串(类似这样:'x+y-2z')并通过评估表达式来创建新功能。输出应该是这样的:

在此处输入图像描述

我想概括这个函数,以便它适用于表达式中具有不同列(特征)名称的不同数据帧。

编辑-我有一个所需函数的原型(名为“解析器”):

def解析器(exp):

df['new_col'] = df.apply(lambda row: row.x+row.y-2*row.z, axis=1)

但是,我想概括这部分 - row.x+row.y-2*row.z以便它根据作为其参数提供的字符串(即表达式)进行自我调整。

1个回答

欢迎来到社区!

下面的代码是一个初学者。您可以通过命名列并将其添加到原始 DataFrame 继续:

import pandas as pd

data = pd.DataFrame({'x':[1,2,3], 'y':[10,20,30],'z':[100,200,300]})
print(data)
def my_fun(data,expression,variables):
    for v in variables:
        expression = expression.replace(v,'data.'+str(v))
    return eval(expression)


my_fun(data,'2*x+y',['x','y'])

输出

   x   y    z
0  1  10  100
1  2  20  200
2  3  30  300

0    12
1    24
2    36
dtype: int64

一般有两种方式:

  1. 像我一样使用eval函数以字符串形式评估/执行表达式。
  2. 使用符号库,最常用的是SymPy,将符号直接用作变量。

希望能帮助到你。祝你好运!