cómo multiplicar varias columnas por una columna en Pandas

1 minuto de lectura

Me gustaría tener:

df[['income_1', 'income_2']] * df['mtaz_proportion']

devuelve esas columnas multiplicadas por df['mtaz_proportion']

para que pueda configurar

df[['mtaz_income_1', 'mtaz_income_2']] = 
df[['income_1', 'income_2']] * df['mtaz_proportion']

pero en cambio obtengo:

income_1    income_2    0   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  
0   NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
1   NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...
2   NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ...

etc…

¿Qué cosa simple me estoy perdiendo?

¡Gracias!

usar multiply método y conjunto axis="index":

df[["A", "B"]].multiply(df["C"], axis="index")

  • Solo una advertencia: df["C"] puede no comportarse como se esperaba si se pasa como un DataFrame como df[["C"]]

    – Alexander MacFarlane

    3 de julio de 2018 a las 15:48

  • El código funciona pero el df no lo sostiene. (-> print(df) solo da el df original después) En su lugar, haga: df[[“A”, “B”]]= df[[“A”, “B”]].multiplicar(df[“C”]axis=”index”) y luego las columnas A y B en el df contienen los cambios

    – Matthi9000

    29 de agosto de 2020 a las 14:44


  • No lo sé, pero de alguna manera todas las filas y columnas se convierten en NaN después de la multiplicación.

    – EMT

    25 de marzo a las 15:13

avatar de usuario
Matthi9000

Otra forma de escribir la respuesta de HYRY:

df.loc[:,['A', 'B']] = df.loc[:,['A', 'B']].multiply(df.loc[:, 'C'], axis="index")

avatar de usuario
rachwa

Convierte ambos factores a entumecido arreglos usando to_numpy:

df.loc[:, ['D', 'E']] = df[['A', 'B']].to_numpy() * df[['C']].to_numpy()

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad