Aplicar una función a múltiples columnas en Pandas DataFrame

Este artículo introducirá cómo aplicar una función a múltiples columnas en Pandas DataFrame. Utilizaremos el mismo DataFrame que se muestra a continuación en todos los códigos de ejemplo.

import pandas as pd
import numpy as np

df = pd.DataFrame([
                    [5,6,7,8],
                    [1,9,12,14],
                    [4,8,10,6]
                    ],
                  columns = ['a','b','c','d'])

Resultado:

   a  b   c   d
0  5  6   7   8
1  1  9  12  14
2  4  8  10   6

Use apply() para aplicar funciones a las columnas en Pandas

El método apply() permite aplicar una función para un DataFrame completo, ya sea a través de columnas o filas. Establecemos el parámetro axis como 0 para las filas y 1 para las columnas.

En los ejemplos que se muestran a continuación, incrementaremos el valor de un DataFrame de muestra utilizando la función que definimos anteriormente:

import pandas as pd
import numpy as np

df = pd.DataFrame([
                    [5,6,7,8],
                    [1,9,12,14],
                    [4,8,10,6]
                    ],
                  columns = ['a','b','c','d'])

def x(a):
    return a + 1 

df_new  = df.apply(x, axis = 1)

print("The original dataframe:")
print(df)
print("The new dataframe:")
print(df_new)

Resultado:

The original dataframe:
   a  b   c   d
0  5  6   7   8
1  1  9  12  14
2  4  8  10   6
The new dataframe:
   a   b   c   d
0  6   7   8   9
1  2  10  13  15
2  5   9  11   7

También podemos aplicar una función a múltiples columnas, como se muestra a continuación:

import pandas as pd
import numpy as np

df = pd.DataFrame([
                    [5,6,7,8],
                    [1,9,12,14],
                    [4,8,10,6]
                    ],
                  columns = ['a','b','c','d'])

print("The original dataframe:")
print(df)

def func(x):
    return x[0] + x[1]

df['e']  = df.apply(func, axis = 1)

print("The new dataframe:")
print(df)

Resultado:

The original dataframe:
   a  b   c   d
0  5  6   7   8
1  1  9  12  14
2  4  8  10   6
The new dataframe:
   a  b   c   d   e
0  5  6   7   8  11
1  1  9  12  14  10
2  4  8  10   6  12

La nueva columna e añadida es la suma de los datos de las columnas a y b. El propio DataFrame es el argumento oculto pasado a la función. Se puede acceder a las columnas con el índice como en el ejemplo anterior, o con el nombre de la columna, como se muestra a continuación.

import pandas as pd
import numpy as np

df = pd.DataFrame([
                    [5,6,7,8],
                    [1,9,12,14],
                    [4,8,10,6]
                    ],
                  columns = ['a','b','c','d'])

print("The original dataframe:")
print(df)

df['e']  = df.apply(lambda x: x.a+x.b, axis = 1)

print("The new dataframe:")
print(df)

Realiza la misma operación que el ejemplo anterior. Aquí usamos una función lambda. x.a y x.b se refieren a la columna a y b en el DataFrame.

Artículo relacionado - Pandas DataFrame

  • Mostrar todas las columnas de un Pandas DataFrame
  • Cómo convertir Pandas DataFrame en un array de Numpy