Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

218
Vistas
Multiplique el marco de datos con series que tienen duplicados de índice y excluyen una columna

Una versión abreviada de mi marco de datos se ve así:

 df_crop = pd.DataFrame({ 'Name' : ['Crop1', 'Crop1', 'Crop1', 'Crop1', 'Crop2', 'Crop2', 'Crop2', 'Crop2'], 'Type' : ['Area', 'Diesel', 'Fert', 'Pest', 'Area', 'Diesel', 'Fert', 'Pest'], 'GHG': [14.9, 0.0007, 0.145, 0.1611, 2.537, 0.011, 0.1825, 0.115], 'Acid': [0.0125, 0.0005, 0.0029, 0.0044, 0.013, 0.00014, 0.0033, 0.0055], 'Terra Eutro': [0.053, 0.0002, 0.0077, 0.0001, 0.0547, 0.00019, 0.0058, 0.0002] })

Ahora necesito normalizar todos los valores en el marco de datos con rendimiento, que es diferente por cultivo, pero no por Tipo:

 s_yield = pd.Series([0.388, 0.4129], index=['Crop1', 'Crop2'])

Necesito conservar la información en 'Tipo'. Si trato de usar .mul() , recibo un error debido a los índices duplicados: ValueError: cannot reindex from a duplicate axis .

La única otra idea que tengo es usar .loc() pero tengo muchas columnas (16 con valores para normalizar) y no se me ocurrió nada eficiente. ¿Alguna sugerencia?

Editar : la siguiente tabla podría ayudar a mostrar lo que trato de lograr: ingrese la descripción de la imagen aquí

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Obtenga los datos numéricos y multiplique usando la serie

 numeric_df = df_crop.select_dtypes('number') df_crop[numeric_df.columns] = numeric_df.mul(df_crop.Name.map(s_yield), axis=0)

Producción

 Name Type GHG Acid Terra Eutro 0 Crop1 Area 5.781200 0.004850 0.020564 1 Crop1 Diesel 0.000272 0.000194 0.000078 2 Crop1 Fert 0.056260 0.001125 0.002988 3 Crop1 Pest 0.062507 0.001707 0.000039 4 Crop2 Area 1.047527 0.005368 0.022586 5 Crop2 Diesel 0.004542 0.000058 0.000078 6 Crop2 Fert 0.075354 0.001363 0.002395 7 Crop2 Pest 0.047483 0.002271 0.000083
over 4 years ago · Santiago Trujillo Denunciar

0

A partir de pandas 0.24.0, puede fusionar series en un marco de datos directamente siempre que se nombre la serie:

 df_merged = df_crop.merge(s_yield.rename('yield'), left_on = 'Name', right_index = True)

luego multiplique las columnas según sea necesario.

over 4 years ago · Santiago Trujillo Denunciar

0

Puede usar s_yield.map para extender la Serie a la longitud del marco de datos, y puede usar df.select_dtypes para encontrar todas las columnas de un tipo de dtipo específico y múltiples en ellas:

 cols = df_crop.select_dtypes('number').columns df_crop[cols] = df_crop[cols].mul(df_crop['Name'].map(s_yield), axis=0)

Producción:

 >>> df_crop Name Type GHG Acid Terra Eutro 0 Crop1 Area 5.781200 0.004850 0.020564 1 Crop1 Diesel 0.000272 0.000194 0.000078 2 Crop1 Fert 0.056260 0.001125 0.002988 3 Crop1 Pest 0.062507 0.001707 0.000039 4 Crop2 Area 1.047527 0.005368 0.022586 5 Crop2 Diesel 0.004542 0.000058 0.000078 6 Crop2 Fert 0.075354 0.001363 0.002395 7 Crop2 Pest 0.047483 0.002271 0.000083
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda