Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Multiplicando duas colunas de dois df distintos

Eu tenho 2 df distintos. Um com preços em diferentes moedas e outro com as cotações para equaliza-los todos em USD.

Já confirmei o dtype ambas são float64

dtype('float64')

A expressão é essa:

df1['USD_price'] = [df1.local_price]*[df2.Rate]

A intenção é que no df1 eu tenha uma nova serie trazendo todos esse resultados equalizados em USD Ambos os df's tem o mesmo números de row e cada cotação está alinhada com o rate certo para moeda local certa.

Tá me vindo esse erro:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-51-48d17c215d29> in <module>
----> 1 pricing['USD_price'] = [pricing.price]*[usd_d_rates.Rate]

TypeError: can't multiply sequence by non-int of type 'list'

Esse tipo de operação eu só consigo fazer com listas??? Eu fiz as conversões desses df par lista no

price=df1.tolist()
rate=df2.tolist()

rate

[0.849221,
 6.324407,
 0.849221,
 0.849221,
 0.849221,
 0.766799,
 3.744805,
 4.1089,
 73.7802,
 0.849221,
 0.766799,
 27.650852,
 72.7711,
 5.4342,
 5.4342,
 1.339389,
 1.339389,
 786.2,
 3757.829376,
 22.4919,
 1.0,
 6.9679,
 1189.424988]

price

[0.96,
 10.5,
 1.293,
 1.47,
 1.325,
 1.05,
 6.441,
 536.79,
 112.2,
 1.3,
 164.68,
 46.3,
 60.51,
 6.14,
 6.61,
 127.01,
 148.18,
 1280.0,
 5465.0,
 25.4,
 38.81,
 36.94,
 4279.0]

Ainda não consegui.... mas eu preferia fazer isso dentro do pandas direto no df... Alguém me dá um luz?

3 respostas
solução!

Olá Luiz,

Se entendi bem tudo que você precisa fazer é multiplicar diretamente df1['USD_price'] = df1.local_price * df2.Rate

Exemplo:

import pandas as pd

df1 = pd.DataFrame([2, 2, 2, 2, 2], columns=['num'])
df2 = pd.DataFrame([3, 3, 3, 3, 3], columns=['valor'])

df1['result'] = df1['num'] * df2['valor']
df1

# Coluna 'result':
6, 6, 6, 6, 6

Isso mesmo... mas eu fucei na documetação e acabei usando outra estrutura e ficou bom

pricing['usd_base_kg'] = pricing.price.mul(usd_d_rates.Rate)

Enfim... funcionou... mas não sei se há qualquer diferença relevante de uma sintaxe para outra!

Obrigado pela orientação

Ah, o mul() é equivalente à multiplicação direta com * mas com uma opção extra para tratar dados nulos, então nesse caso você pode usar o método que preferir.