Как проанализировать строковое вычисление в столбце фрейма данных pandas

#python #python-3.x #pandas #dataframe #eval

#python #python-3.x #pandas #фрейм данных #вычисление

Вопрос:

Я пытаюсь проанализировать строковое вычисление, которое представляет собой столбец внутри фрейма данных, если вычисление статическое, я могу использовать функцию eval . Однако, похоже, это не работает, когда вы даете ему имя столбца.

 import pandas as pd

calcs = {'a': [1,1],
         'b': [1,1],
         'c': [1,1],
         'calc': ['result=a*b','result=a b']}

df = pd.DataFrame(calcs, columns = ['a', 'b','c','calc'])
 
print(df)
 
a b c calc
1 1 1 a*b
1 1 1 a b
 

не могли бы вы рассказать мне, как можно было бы оценить вычисление в столбце ‘calc’ для каждой строки в фрейме данных.

Ответ №1:

Вы можете df.apply , df.eval :

 >>> df['result'] = df.apply(lambda x:x.to_frame().T.eval(x[-1]).item(), axis=1)
>>> df
   a  b  c calc  result
0  1  1  1  a*b       1
1  1  1  1  a b       2
 

Или использовать np.diag :

 >>> import numpy as np
>>> df['result'] = np.diag(df.eval(df['calc']))
>>> df
   a  b  c calc  result
0  1  1  1  a*b       1
1  1  1  1  a b       2
 

Комментарии:

1. Очень элегантное решение!