将声明为字符串的函数应用于pandas数据帧

问题描述 投票:0回答:1

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

我知道如何处理简单的情况:

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))']。有没有什么办法可以用这些新函数创建第一个例子的列?

python pandas
1个回答
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))
© www.soinside.com 2019 - 2024. All rights reserved.