将声明为字符串的函数应用于熊猫数据框

时间:2019-04-05 12:28:35

标签: python pandas

我有一个熊猫数据框。我想在数据框中创建新列 现有列的数学函数值。

我知道在简单情况下该怎么做:

import pandas as pd
import numpy as np

# Basic dataframe
df = pd.DataFrame(data={'col1': [1,2], 'col2':[3,5]})
for i in df.columns:
    df[f'{i}_sqrt'] = df[i].apply(lambda x :np.sqrt(x))

产生

enter image description here

现在,我想将其扩展到函数以字符串形式编写的情况:

one_func = ['(x)', '(np.sqrt(x))']
two_func = ['*'.join(i) for i in itertools.product(one_func, one_func)]

,这样two_func = ['(x)*(x)','(x)*(np.sqrt(x))','(np.sqrt(x))*(x)', '(np.sqrt(x))*(np.sqrt(x))']。有什么办法可以使用这些新功能创建类似于第一个示例的列?

1 个答案:

答案 0 :(得分:2)

这看起来是一个糟糕的设计,但我不会走这条路。

回答您的问题,您可以使用df.eval

首先设置

one_func = ['{x}', '(sqrt({x}))']

使用{}而不是(),以便您可以将{x}替换为实际的列名。

然后,例如

expr = two_func[0].format(x='col1')
df.eval(expr)

食物看起来像环

for col in df.columns:
    for func in two_func: df[func] = df.eval(func.format(x=col))