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 nueva columna con valores de otra columna basado en una condición.

Tengo un dataframe:

A   B   Valor   FY
1   5    a     2020
2   6    b     2020
3   7    c     2021
4   8    d     2021

Quiero crear una columna ‘prev_FY’ que mire la columna ‘valor’ y el año anterior y complete la fila del año actual en la columna FY. Mi resultado deseado es:

A   B   Valor   FY      prev_FY
1   5    a     2020    
2   6    b     2020
3   7    c     2021      a
4   8    d     2021      b

Intenté usar la función pivottable pero no funciona ya que los valores permanecen iguales correspondientes al FY. La función SHIFT no es factible ya que tengo millones de filas.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para obtener la salida deseada, podemos utilizar declaraciones condicionales y varias columnas para crear la nueva columna ‘prev_FY’.

    En primer lugar, necesitamos ordenar el marco de datos en orden ascendente según la columna ‘FY’. Luego, podemos crear una nueva columna ‘temp’ que almacenará los valores de la columna ‘value’ de la fila anterior. Esto se puede hacer utilizando la función shift() en pandas.

    A continuación, podemos crear la columna ‘prev_FY’ verificando si el valor de ‘FY’ es igual al valor de ‘FY’ de la fila anterior. Si es así, podemos rellenar la columna ‘prev_FY’ con el valor de la columna ‘temp’. De lo contrario, podemos dejarla vacía.

    Aquí está el código para lograr esto:

    df = df.sort_values(by=['FY'])
    df['temp'] = df['Value'].shift(1)
    
    def prev_fy(row):
        if row['FY'] == row.shift(1)['FY']:
            return row['temp']
        else:
            return ''
    
    df['prev_FY'] = df.apply(prev_fy, axis=1)
    df = df.drop(columns=['temp'])
    

    Esto nos dará el marco de datos de salida deseado con la columna ‘prev_FY’ poblada correctamente.

Comments are closed.