#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. Очень элегантное решение!