Operaciones sobre groupby Pandas
marzo 31, 2015
Operaciones sobre groupby¶
Agrupar datos de un dataframe¶
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
Se agrupan los datos con los elementos de la columna a
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:
for nombre, datos in group_a:
print nombre
print datos
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.
data_2 = group_a.get_group(2)
print data_2
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:
data_sum = df.groupby('a').apply(sum)
print data_sum
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.
def suma_rara(dataframe):
return min(dataframe['c'] + dataframe['b'])
data = df.groupby('a').apply(suma_rara)
print data
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
data_esp = df.groupby('a').agg({'b':'first', 'c':'last'})
print data_esp
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:
data_esp = df.groupby('a').agg({'b':['mean', 'max'], 'c':'min'})
print data_esp
0 comments