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

646
Vistas
Pandas/Python: establezca el valor de una columna en función del valor en otra columna

Necesito establecer el valor de una columna en función del valor de otra en un marco de datos de Pandas. Esta es la lógica:

 if df['c1'] == 'Value': df['c2'] = 10 else: df['c2'] = df['c3']

No puedo hacer que esto haga lo que quiero, que es simplemente crear una columna con nuevos valores (o cambiar el valor de una columna existente: cualquiera funciona para mí).

Si trato de ejecutar el código anterior o si lo escribo como una función y uso el método de aplicación, obtengo lo siguiente:

 ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

una forma de hacerlo sería utilizar la indexación con .loc .

Ejemplo

En ausencia de un marco de datos de ejemplo, inventaré uno aquí:

 import numpy as np import pandas as pd df = pd.DataFrame({'c1': list('abcdefg')}) df.loc[5, 'c1'] = 'Value' >>> df c1 0 a 1 b 2 c 3 d 4 e 5 Value 6 g

Suponiendo que desea crear una nueva columna c2 , equivalente a c1 excepto donde c1 es Value , en cuyo caso, le gustaría asignarlo a 10:

Primero, puede crear una nueva columna c2 y establecerla en equivalente a c1 usando una de las siguientes dos líneas (esencialmente hacen lo mismo):

 df = df.assign(c2 = df['c1']) # OR: df['c2'] = df['c1']

Luego, encuentre todos los índices donde c1 es igual a 'Value' usando .loc y asigne el valor deseado en c2 a esos índices:

 df.loc[df['c1'] == 'Value', 'c2'] = 10

Y terminas con esto:

 >>> df c1 c2 0 aa 1 bb 2 cc 3 dd 4 ee 5 Value 10 6 gg

Si, como sugirió en su pregunta, a veces solo desea reemplazar los valores en la columna que ya tiene , en lugar de crear una nueva columna, simplemente omita la creación de la columna y haga lo siguiente:

 df['c1'].loc[df['c1'] == 'Value'] = 10 # or: df.loc[df['c1'] == 'Value', 'c1'] = 10

Dandote:

 >>> df c1 0 a 1 b 2 c 3 d 4 e 5 10 6 g
over 4 years ago · Santiago Trujillo Denunciar

0

Puede usar np.where() para establecer valores en función de una condición específica:

 #df c1 c2 c3 0 4 2 1 1 8 7 9 2 1 5 8 3 3 3 5 4 3 6 8

Ahora cambie los valores (o establezca) en la columna ['c2'] según su condición.

 df['c2'] = np.where(df.c1 == 8,'X', df.c3) c1 c2 c3 0 4 1 1 1 8 X 9 2 1 8 8 3 3 5 5 4 3 8 8
over 4 years ago · Santiago Trujillo Denunciar

0

tratar:

df['c2'] = df['c1'].apply(lambda x: 10 if x == 'Value' else x)

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