Я пытаюсь умножить два 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'])
В твоем случае
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