es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La mejor/forma concisa de concatenar condicionalmente dos columnas en un DataFrame de Pandas.

Estoy intentando concatenar dos columnas en un Dataframe de Pandas de manera condicional.

Encontré una respuesta relacionada en https://stackoverflow.com/questions/56119307/pandas-conditionally-concat-two-columns, que adapté a continuación, pero parece que debería haber una manera más concisa de hacer esto. En R con dplyr o data.table, esto es una línea de código bastante simple.

Importo pandas y numpy

data = {“Product”: [“Shorts”, “T-Shirt”, “Jacket”, “Cap”], “Color”: [“Red”, “Blue”, “White”, “Green”], “Size”: [“S”, “M”, None, “S”]}

Creo un dataframe con los datos anteriores

df = pd.DataFrame(data)

Si el valor en la columna ‘Size’ es ‘S’, entonces concateno las columnas ‘Product’ y ‘Color’, de lo contrario solo agrego el valor de la columna ‘Color’

for index, row in df.iterrows():
if row[‘Size’] == ‘S’:
df.loc[index, ‘Output’] = str(row[‘Product’]) + ” (” + str(row[‘Color’]) + ‘)’
else:
df.loc[index, ‘Output’] = str(row[‘Color’])

Devuelvo el dataframe con la nueva columna agregada

df

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para concatenar condicionalmente dos columnas en un DataFrame de Pandas, el código anterior es una solución posible. Crea una nueva columna llamada 'Output' iterando sobre cada fila, comprobando si la columna 'Size' es igual a 'S', y luego concatenando las columnas 'Product' y 'Color' o solo usando la columna 'Color'. Este código podría mejorarse usando operaciones vectorizadas en lugar de un bucle for con iterrows(), lo que puede ser más lento en conjuntos de datos grandes. Sin embargo, la implementación dependería del caso de uso específico y el formato de salida deseado. En general, Pandas y Python ofrecen muchas formas de manipular las columnas de los DataFrame y personalizarlas según sus necesidades.

Comments are closed.