Groupby

El metodo groupby nos permite agrupar informacion y aplicar funciones de agregacion


In [2]:
#%% librerias
import pandas as pd
# Crear un dataFrame
data = {'Company':['GOOG','GOOG','MSFT','MSFT','FB','FB'],
       'Person':['Sam','Charlie','Amy','Vanessa','Carl','Sarah'],
       'Sales':[200,120,340,124,243,350]}

In [3]:
df = pd.DataFrame(data)

In [4]:
df


Out[4]:
Company Person Sales
0 GOOG Sam 200
1 GOOG Charlie 120
2 MSFT Amy 340
3 MSFT Vanessa 124
4 FB Carl 243
5 FB Sarah 350

Ahora ya podemos usar la funcion .groupby() para agrupar la informacion en base a los nombres de las columnas. Agrupemos la informacion por el nombre de la compania. Esto creara un objeto DataFrameGroupBy


In [5]:
df.groupby('Company')


Out[5]:
<pandas.core.groupby.DataFrameGroupBy object at 0x106505a58>

Este objeto lo podemos guardar como una nueva variable


In [6]:
by_comp = df.groupby("Company")

Y en seguida mandar llamar los metodos de agregacion


In [7]:
by_comp.mean()


Out[7]:
Sales
Company
FB 296.5
GOOG 160.0
MSFT 232.0

In [8]:
df.groupby('Company').mean()


Out[8]:
Sales
Company
FB 296.5
GOOG 160.0
MSFT 232.0

Mas ejemplos de funciones


In [9]:
by_comp.std()


Out[9]:
Sales
Company
FB 75.660426
GOOG 56.568542
MSFT 152.735065

In [10]:
by_comp.min()


Out[10]:
Person Sales
Company
FB Carl 243
GOOG Charlie 120
MSFT Amy 124

In [11]:
by_comp.max()


Out[11]:
Person Sales
Company
FB Sarah 350
GOOG Sam 200
MSFT Vanessa 340

In [12]:
by_comp.count()


Out[12]:
Person Sales
Company
FB 2 2
GOOG 2 2
MSFT 2 2

In [13]:
by_comp.describe()


Out[13]:
Sales
count mean std min 25% 50% 75% max
Company
FB 2.0 296.5 75.660426 243.0 269.75 296.5 323.25 350.0
GOOG 2.0 160.0 56.568542 120.0 140.00 160.0 180.00 200.0
MSFT 2.0 232.0 152.735065 124.0 178.00 232.0 286.00 340.0

In [14]:
by_comp.describe().transpose()


Out[14]:
Company FB GOOG MSFT
Sales count 2.000000 2.000000 2.000000
mean 296.500000 160.000000 232.000000
std 75.660426 56.568542 152.735065
min 243.000000 120.000000 124.000000
25% 269.750000 140.000000 178.000000
50% 296.500000 160.000000 232.000000
75% 323.250000 180.000000 286.000000
max 350.000000 200.000000 340.000000

In [15]:
by_comp.describe().transpose()['GOOG']


Out[15]:
Sales  count      2.000000
       mean     160.000000
       std       56.568542
       min      120.000000
       25%      140.000000
       50%      160.000000
       75%      180.000000
       max      200.000000
Name: GOOG, dtype: float64