Рассчитать новый столбец в пандах на основе определенных критериев

Я пытаюсь умножить два df на основе определенных значений.

data = {'a':10,'b':20,'c':30} . 

дф1:

id,tag,factor
1,a ,20 
2,b ,22 
3,c ,25 

мой окончательный результат должен выглядеть примерно так:

id,factor,calc  
1,20,200
2,22,440
3,24,750

Шаги, которые я пробовал, но дают ошибку.

df['calc'] = df['factor'] * data.get(df['tag'])

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
0
48
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий

В твоем случае

df1['calc']=df1.factor*df1.tag.map(data)

Или сделать что-то другое

df['calc']=df.factor*np.vectorize(data.get)(df.tag)#pd.Series(data).get(df.tag).values
df1['calc']=df1.factor*df1.tag.map(data)

df1.tag.map(data) проверьте значения словаря data и замените их соответствующим ключом, что даст вам новую серию, которую можно умножить на df1.factor

Вы можете использовать pandas.series.map и pandas.DataFrame.drop

df['calc'] = df['factor'] * df['tag'].map(data)
df.drop('tag', axis=1, inplace=True)

ВЫХОД:

   id  factor  calc
0   1      20   200
1   2      22   440
2   3      25   750
df['calc'] = df['factor'] * pd.Series([data[key] for key in df["tag"]])

ВЫХОД

   id  factor  calc
0   1      20   200
1   2      22   440
2   3      25   750

Использование понимания списка

df1['calc'] = [x.factor * data[x.tag] for i, x in df1.iterrows()]

Выход

   id tag  factor  calc
0   1   a      20   200
1   2   b      22   440
2   3   c      25   750

Другие вопросы по теме