У меня очень длинный и широкий массив данных. Я хотел бы создать новый столбец в этом кадре данных, где значение зависит от многих других столбцов в df. Расчет, необходимый для значений в этом новом столбце, ТАКЖЕ изменяется, в зависимости от значения в каком-либо другом столбце.
Ответы на на этот вопрос и на этот вопрос подходят близко, но мне это не совсем подходит.
В итоге у меня будет около 30 различных вычислений, которые можно применить, поэтому я не слишком заинтересован в функции np.where
, которая не слишком читаема для слишком большого числа условий.
Мне также настоятельно рекомендовали не делать цикл for для всех строк в кадре данных, поскольку он должен быть ужасным для производительности (пожалуйста, исправьте меня, если я ошибаюсь).
Что я пытался сделать вместо этого:
import pandas as pd
import numpy as np
# Information in my columns look something like this:
df['text'] = ['dab', 'def', 'bla', 'zdag', 'etc']
df['values1'] = [3 , 4, 2, 5, 2]
df['values2'] = [6, 3, 21, 44, 22]
df['values3'] = [103, 444, 33, 425, 200]
# lists to check against to decide upon which calculation is required
someList = ['dab', 'bla']
someOtherList = ['def', 'zdag']
someThirdList = ['etc']
conditions = [
(df['text'] is None),
(df['text'] in someList),
(df['text'] in someOtherList),
(df['text'] in someThirdList)]
choices = [0,
round(df['values2'] * 0.5 * df['values3'], 2),
df['values1'] + df['values2'] - df['values3'],
df['values1'] + 249]
df['mynewvalue'] = np.select(conditions, choices, default=0)
print(df)
Я ожидаю, что на основе значений строк в df['text']
правильный расчет применяется к тому же значению строки df['mynewvalue']
.
Вместо этого я получаю ошибку The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
Как я могу запрограммировать это, чтобы я мог использовать такие условия для определения правильного расчета для этого столбца df ['mynewvalue']?