Python Pandas eval с формулой в качестве значения - PullRequest
0 голосов
/ 26 апреля 2018

Я хочу сделать странную вещь, и я подготовил пример:

import pandas as pd
df = pd.DataFrame({'A': [1,2,3], 'B': [1,2,3], 'formula': ['A+B', 'A-B', 'A*B']})

ДФ:

+---+---+---+---------+
|   | A | B | formula |
+---+---+---+---------+
| 0 | 1 | 1 | A+B     |
| 1 | 2 | 2 | A-B     |
| 2 | 3 | 3 | A*B     |
+---+---+---+---------+

Я хочу сделать что-то подобное:

df[C] = df.eval(df['formula])

чтобы получить:

+---+---+---+---------+---+
|   | A | B | formula | C |
+---+---+---+---------+---+
| 0 | 1 | 1 | A+B     | 2 |
| 1 | 2 | 2 | A-B     | 0 |
| 2 | 3 | 3 | A*B     | 9 |
+---+---+---+---------+---+

Но я получаю странную ошибку:

ValueError: Неверное количество пройденных элементов 3, размещение подразумевает 1

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Попробуйте, вы получите точный результат:

import pandas as pd
dataFrame = pd.DataFrame({'A': [1,2,3], 'B': [1,2,3], 'formula': ['A+B', 'A-B', 'A*B']})
dataFrame['C']=[x.eval(x['formula'].iloc[0]).iloc[0] for _,x in dataFrame.groupby(level=0)]
print dataFrame

Проверено здесь: http://tpcg.io/xSqKh7

0 голосов
/ 26 апреля 2018

Попробуйте с groupby и eval

df['New']=[x.eval(x['formula'].iloc[0]).iloc[0] for _,x in df.groupby(level=0)]
df
Out[270]: 
   A  B formula  New
0  1  1     A+B    2
1  2  2     A-B    0
2  3  3     A*B    9
...