在python中从列表的元素执行等式

2wnc66cl  于 2023-03-04  发布在  Python
关注(0)|答案(1)|浏览(113)

我有以下列表和 Dataframe :

import pandas as pd
data = [[5, 10, 40], [2, 15, 70], [6, 14, 60]]
df = pd.DataFrame(data, columns=['A', 'B', 'C'])
lst = [5, '*', 'A', '+', 'C']

我想创建一个代码来执行lst中的等式,比如5 x A + C,返回以下结果:

data = [[65], [80], [90]]
dresult = pd.DataFrame(data, columns=['M'])

这可能吗?

42fyovps

42fyovps1#

是的。你只要这样做:

import pandas as pd

data = [[5, 10, 40], [2, 15, 70], [6, 14, 60]]
df = pd.DataFrame(data, columns=['A', 'B', 'C'])
lst = [5, '*', 'A', '+', 'C']

expression = ' '.join(str(e) for e in lst)

dresult = pd.DataFrame()
dresult['M'] = df.eval(expression)

print(dresult)

即:

M
0  65
1  80
2  90
    • 编辑**

在多索引的情况下,它将如下所示:

import pandas as pd

data = [[5, 10, 40], [2, 15, 70], [6, 14, 60]]
index = pd.MultiIndex.from_tuples([('A', 'x'), ('B', 'x'), ('C', 'y')], names=['level_1', 'level_2'])
df = pd.DataFrame(data, index=index, columns=['Value_1', 'Value_2', 'Value_3'])

lst = [5, '*', 'Value_1', '+', 'Value_3']
expression = ' '.join(str(e) for e in lst)

dresult = pd.DataFrame()
dresult['Result'] = df.eval(expression)

print(dresult)

这会给你

Result
level_1 level_2        
A       x            65
B       x            80
C       y            90

然后你可以清理你的df,因为你认为合适。

相关问题