Multiplica dos columnas de diferentes marcos de datos en Python
Tengo dos marcos de datos (ambos son de tipo flotante). El primero se llama Prices
y contiene solo precios:
El segundo se llama Table_ScenarioPercentages
y contiene porcentajes donde los precios deben multiplicarse por:
Entonces, lo que quiero hacer es multiplicar el valor del Período 20240201 (Precios) por el Mes 0 (Table_ScenarioPercentages), el valor del Período 20240301 (Precios) por el Mes 1 (Table_ScenarioPercentages), etc.
He intentado:
Prices.iloc[:, 0]*Table_ScenarioPercentages.iloc[:, 0]
pero esto solo da muchos NaN y el formato incorrecto:
¿Alguien sabe cómo hacer esto en Python?
TL;DR
UsarPrices['DATED BRENT']*Table_ScenarioPercentages['Supply Side Shock Up - Crude'].values
Según los documentos de pd.Series
(cursiva mía):
Las operaciones entre series (+, -, /, *, **) alinean los valores según sus valores de índice asociados
Dado que los índices para ambos dfs ( 20240201, 20240301, ...
y 0, 1, ...
) comparten valores 0 , terminará con una nueva Serie con los valores de índice de ambos y NaN
valores como resultado de some value * NaN
o viceversa para cada valor de índice.
Si desea multiplicar en la posición del índice , use Series.values
para obtener un ndarray (o use:) Series.to_numpy
. NB: en este caso, ambas series deben tener la misma longitud.
Muestra de datos
import pandas as pd
df1 = pd.DataFrame({'Col1': [20, 10]}, index=[1, 'A'])
df2 = pd.DataFrame({'Col2': [10, 20]})
print(df1)
Col1
1 20
A 10
print(df2)
Col2
0 10
1 20
Multiplicación basada en índices (cf. resultado no deseado de OP )
print(df1['Col1']*df2['Col2'])
0 NaN # NaN * 10 (0 not in `df.index`)
1 400.0 # 20 * 20 (1 in both indices)
A NaN # 10 * NaN ('A' not in `df2.index`)
dtype: float64
Multiplicación por posición de índice (deseada, con Series.values
)
print(df1['Col1']*df2['Col2'].values)
1 200 # 20 * 10
A 200 # 10 * 20
Name: Col1, dtype: int64