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.

crear una columna buscando valores no nulos en otras columnas

Estoy tratando de crear una columna en mi dataframe que busca en cada columna y verifica si el valor en una fila específica es nulo o no. Si no es nulo, la nueva columna contendrá este valor; de lo contrario, se omitirá. No es posible que dos columnas contengan un valor no nulo.

Por ejemplo:

  A   B   C   D   E
NaN NaN NaN NaN   a 
  b NaN NaN NaN NaN
NaN NaN NaN NaN NaN 

Mi resultado esperado:

  A   B   C   D   E  nueva_columna
NaN NaN NaN NaN   a           a
  b NaN NaN NaN NaN           b
NaN NaN NaN NaN NaN         NaN
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para lograr esto en pandas, podemos usar el método apply() para iterar sobre cada fila del dataframe y verificar si hay un valor no nulo en esa fila. Si lo hay, podemos obtener ese valor y almacenarlo en una nueva columna. Si no lo hay, podemos establecer el valor de la nueva columna como nulo. Aquí está el código para hacer esto:

    import pandas as pd
    
    # Cargar el dataframe
    df = pd.read_csv('data.csv')
    
    # Crear una nueva columna y establecer todos los valores como nulos
    df['nueva_columna'] = None
    
    # Iterar a través de cada fila del dataframe
    for index, row in df.iterrows():
       # Verificar si hay un valor no nulo en la fila
       valor_no_nulo = row.dropna().values
    
       # Si hay un valor no nulo, almacenarlo en la nueva columna
       if len(valor_no_nulo) == 1:
          df.loc[index, 'nueva_columna'] = valor_no_nulo[0]
    

    En este código, df.iterrows() devuelve un iterador que proporciona pares de índice y fila. Usamos esto para iterar sobre cada fila del dataframe. row.dropna().values devuelve un array de los valores no nulos en la fila. Verificamos la longitud de este array para asegurarnos de que solo hay un valor no nulo en la fila. Si lo hay, lo almacenamos en la nueva columna usando df.loc[].

Comments are closed.