Operaciones sobre groupby Pandas

marzo 31, 2015

Operaciones sobre groupby

Operaciones sobre groupby

Agrupar datos de un dataframe

In [1]:
import pandas as pd

# se crea el dataframe a partir de un diccionario
df = pd.DataFrame({'a':[2,2,3,3,4,4,4], 'b':[4,3,6,5,4,3,2], 'c':[7,6,5,7,3,8,6]})

print df
   a  b  c
0  2  4  7
1  2  3  6
2  3  6  5
3  3  5  7
4  4  4  3
5  4  3  8
6  4  2  6

[7 rows x 3 columns]

Se agrupan los datos con los elementos de la columna a

In [2]:
group_a = df.groupby('a')

Ahora en group_a se tiene un nombre y un dataframe por cada elemento, sin repetir, de la columna a. El nombre equivale a los valores en a.

Iterar sobre un groupby

Los datos en group_a se encuentran como una tupla (nombre, datos), por lo que se itera sobre dos variables:

In [3]:
for nombre, datos in group_a:
    print nombre
    print datos
2
   a  b  c
0  2  4  7
1  2  3  6

[2 rows x 3 columns]
3
   a  b  c
2  3  6  5
3  3  5  7

[2 rows x 3 columns]
4
   a  b  c
4  4  4  3
5  4  3  8
6  4  2  6

[3 rows x 3 columns]

Obtener datos por el nombre

Se sabe que los nombres de cada grupo son los valores de la columna a sin repetir: 2, 3 y 4. Se puede obtener los datos con el nombre con el método get_group.

In [4]:
data_2 = group_a.get_group(2)
print data_2
   a  b  c
0  2  4  7
1  2  3  6

[2 rows x 3 columns]

Funciones sobre groupby

Usando el método apply se puede aplicar una función sobre un groupby y optener nuevamente un dataframe. Por ejemplo si se requiere calcular la suma de los valores de cada grupo:

In [5]:
data_sum = df.groupby('a').apply(sum)

print data_sum
    a   b   c
a            
2   4   7  13
3   6  11  12
4  12   9  17

[3 rows x 3 columns]

Se puede aplicar sobre los grupos una función previamente creada. Se aplica una función llamada suma_rara que suma las columnas b y c de cada grupo y de ese resultado toma el menor valor a cada grupo.

In [6]:
def suma_rara(dataframe):
    return min(dataframe['c'] + dataframe['b'])

data = df.groupby('a').apply(suma_rara)

print data
a
2     9
3    11
4     7
dtype: int64

Método agg

Se usa cuando se requiere un dataframe con valores específicos del grupo, por ejemplo para cada grupo de a se toma el primer valor de b y el último de c

In [7]:
data_esp = df.groupby('a').agg({'b':'first', 'c':'last'})

print data_esp
   c  b
a      
2  6  4
3  7  6
4  6  4

[3 rows x 2 columns]

Se pueden tomar en cada grupo mas de un valor por cada columna, en este caso se toma el promedio de los valores de b, el máximo de los valores de b y el mínimo de los valores de c de cada grupo:

In [8]:
data_esp = df.groupby('a').agg({'b':['mean', 'max'], 'c':'min'})

print data_esp
     c     b     
   min  mean  max
a                
2    6   3.5    4
3    5   5.5    6
4    3   3.0    4

[3 rows x 3 columns]

You Might Also Like

0 comments

Apoyado por: