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.

Pandas insertando valores en una nueva columna usando pandas apply/map/applymap.

El siguiente es el dataframe:

a b
0 1 3
1 2 4
2 3 5
3 4 6
4 5 7
5 6 8
6 7 9

Quiero agregar una nueva columna, llámala sum que tome la suma de los valores de su respectiva fila.

Resultado esperado:

a b sum
0 1 3 4
1 2 4 6
2 3 5 8
3 4 6 10
4 5 7 12
5 6 8 14
6 7 9 16

¿Cómo lograr esto utilizando las funciones map, apply y applymap de pandas?

Mi código:

df = pd.DataFrame({
‘a’: [1,2,3,4,5,6,7],
‘b’: [3,4,5,6,7,8,9]
})

def suma(df):
return df[‘a’]+df[‘b’]

Métodos que intenté

df[‘sum’] = df.apply(suma(df))
df[‘sum’]=df[[‘a’,’b’]].map(suma)
df[‘sum’] = df.apply(lambda x: x[‘a’] + x[‘b’])

Nota: Este es solo un código de ejemplo. El código original tiene una función que devuelve una salida diferente para cada fila individual y no es tan simple como aplicar la función de suma. Por lo tanto, solicito que hagas una función personalizada suma e implementes estos métodos para que pueda aprender y aplicar lo mismo a mi código.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Aquí hay una posible implementación de la función personalizada y los diferentes métodos para agregar una columna “suma” al DataFrame dado:

    import pandas as pd
    
    # Definir la función personalizada para calcular la suma de los valores de la fila
    def row_sum(row):
        return row['a'] + row['b']
    
    # Crear el DataFrame
    df = pd.DataFrame({
        'a': [1, 2, 3, 4, 5, 6, 7],
        'b': [3, 4, 5, 6, 7, 8, 9],
    })
    
    # Método 1: usar el método apply con la función personalizada
    df['sum'] = df.apply(row_sum, axis=1)
    
    # Método 2: usar el método map con la función personalizada
    df['sum'] = df[['a', 'b']].applymap(row_sum)
    
    # Método 3: usar una función lambda con el método apply
    df['sum'] = df.apply(lambda row: row['a'] + row['b'], axis=1)
    
    print(df)
    

    La salida debería ser:

       a  b  sum
    0  1  3    4
    1  2  4    6
    2  3  5    8
    3  4  6   10
    4  5  7   12
    5  6  8   14
    6  7  9   16
    

    Tenga en cuenta que en los tres métodos, creamos una nueva columna llamada “sum” y le asignamos el resultado de aplicar la función “row_sum” (o la función lambda equivalente) a cada fila del DataFrame. El método “apply” se utiliza para aplicar la función a lo largo de las filas (es decir, axis=1), mientras que el método “applymap” se utiliza para aplicar la función elemento por elemento a las dos columnas del DataFrame.

Comments are closed.