No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

groupby

18/24
Recursos

Permite agrupar datos en funci贸n de los dem谩s. Es decir, hacer el an谩lisis del DataFrame en funci贸n de una de las columnas.

  • Agrupar por Author y mostrar el conteo de los datos de las dem谩s columnas
df_books.groupby('Author').count()
--->              Name    User Rating    Reviews    Price    Year   Genre
Abraham Verghese    2      2     2         2       2       2
Adam Gasiewski      1       1     1         1       1       1
Adam Mansbach       1       1     1         1       1       1
Adir Levy           1       1      1         1       1       1
  • Agrupar por Author y mostrar la media de los datos de las dem谩s columnas
df_books.groupby('Author').median()
--->            User Rating    Reviews    Price    Year 
Abraham Verghese   4.6          4866       11      2010.5
Adam Gasiewski     4.4          3113       6       2017
Adam Mansbach      4.8          9568       9       2011
Adir Levy          4.8          8170       13      2019

La columna Author, en los casos anteriores, pasa a ser el 铆ndice.

  • Podemos usar loc y acceder a un dato espec铆fico del DataFrame. Agrupar por autor y mostrar la suma de los valores de las dem谩s columnas para William Davis
df_books.groupby('Author').sum().loc['William Davis']
---> 
User Rating        8.8
Reviews        14994.0
Price             12.0
Year            4025.0
Name: William Davis, dtype: float64
  • Agrupar por author y mostrar la suma de los valores de las dem谩s columnas. Colocar los 铆ndices que el DataFrame trae por defecto
df_books.groupby('Author').sum().reset_index()
--->              Author    User Rating    Reviews    Price    Year 
0         Abraham Verghese      9.2         9732       22      4021
1         Adam Gasiewski        4.4         3113       6       2017
2         Adam Mansbach         4.8         9568       9       2011
3         Adir Levy             4.8         8170       13      2019
  • La funci贸n agg() permite aplicar varias funciones al DataFrame una vez agrupado seg煤n una columna espec铆fica. Agrupar por Author y mostrar el m铆nimo y m谩ximo de las dem谩s columnas
df_books.groupby('Author').agg(['min','max'])
---> #muestra cada columna dividida en dos: min y max. Estas contienen los valores maximo y minimo de la columna para cada Author 
  • Agrupar por Author, obtener el m铆nimo y m谩ximo de la columna 鈥楻eviews鈥 y sumar los valores de la columna 鈥楿ser Rating鈥
df_books.groupby('Author').agg({'Reviews':['min','max'], 'User Rating':'sum'})
--->                 Reviews min    Reviews max    User Rating 
Abraham Verghese         4866           4866          9.2
Adam Gasiewski           3113           3113          4.4
Adam Mansbach            9568           9568          4.8
Adir Levy                8170           8170          4.8
  • Agrupar por 鈥楢uthor - Year鈥 y contar los valores de las dem谩s columnas
df_books.groupby(['Author','Year']).count()
--->                        Name    User Rating    Reviews    Price    Genre
('Abraham Verghese', 2010)   1       1     1         1        1
('Abraham Verghese', 2011)   1       1      1         1        1
('Adam Gasiewski', 2017)     1       1      1         1        1
('Adam Mansbach', 2011)      1       1      1         1        1

Reto

Lee este art铆culo sobre el m茅todo groupby y cu茅ntanos que otras funciones de agregaci贸n podemos usar

Contribuci贸n creada por: Edward Giraldo.

Aportes 37

Preguntas 11

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

Se puede usar las funciones lambda en el m茅todo .agg(), para obtener funciones custom ya sea para modificar un valor o para filtrar valores.

Un ejemplo puede ser el siguiente:

df_books.groupby('Author').agg({'Year':lambda x: [i-2000 for i in x], 'Reviews':lambda x: sum([i**2 for i in x])})

En donde a la columna Year se le resta 2000 a los a帽os, y se obtiene una lista de los dos 煤ltimos d铆gitos del a帽o relacionado con cada autor. Otro ejemplo es que los Reviews en vez de sumar cada valor se suma el cuadrado de sus valores.

El resultado que obtuve es el siguiente:

Para aplicar una sola funci贸n al agrupamiento tambien se puede usar la funci贸n .apply(). La funci贸n .agg() se utiliza cuando se desean hacer dos o m谩s c谩lculos.

Aqu铆 la documentaci贸n donde se compara SQL y funciones de pandas.

.sample() es muy buena para poder analizar el resultado de nuestras lineas de c贸digo.

Otra cosa que se solicita MUCHO en las pruebas t茅cnicas. De verdad es una clase m谩s para repasar y repasar m谩s y mejor.

驴Ser茅 al 煤nico que le ocurre que cuando saluda el profe, se me viene a la cabeza la canci贸n del frailej贸n Ernesto P茅rez?

Groupby

Permite agrupar datos en funcion de los demas . Es decir, hacer el analisis del dataframe en funcion de una de las columnas.

  • llamamos el dataFrame que vamos a manipular
import pandas as pd
df_books = pd.read_csv('bestsellers-with-categories.csv', sep=',', header=0)
df_books.head(2) ---> #muestra las dos primeras lineas del dataFrame
  • Agrupar por Author y mostrar el conteo de los datos de las demas columnas
df_books.groupby('Author').count()
--->              Name    User Rating    Reviews    Price    Year   Genre
**Abraham Verghese    2         2             2         2       2       2
Adam Gasiewski      1         1             1         1       1       1
Adam Mansbach       1         1             1         1       1       1
Adir Levy           1         1             1         1       1       1**
  • Agrupar por Author y mostrar la media de los datos de las demas columnas
df_books.groupby('Author').median()
--->            User Rating    Reviews    Price    Year 
**Abraham Verghese   4.6          4866       11      2010.5
Adam Gasiewski     4.4          3113       6       2017
Adam Mansbach      4.8          9568       9       2011
Adir Levy          4.8          8170       13      2019**
  • La columna Author, en los casos anteriores, pasa a ser el indice. Podemos usar loc y acceder a un dato especifico del dataFrame. Agrupar por autor y mostrar la suma de los valores de las demas columnas para William Davis
df_books.groupby('Author').sum().loc['William Davis']
---> 
User Rating        8.8
Reviews        14994.0
Price             12.0
Year            4025.0
Name: William Davis, dtype: float64
  • Abrupar por author y mostrar la suma de los valores de las demas columnas. Colocar los indices que el dataFrame trae por defecto
df_books.groupby('Author').sum().reset_index()
--->              Author    User Rating    Reviews    Price    Year 
0         Abraham Verghese      9.2         9732       22      4021
1         Adam Gasiewski        4.4         3113       6       2017
2         Adam Mansbach         4.8         9568       9       2011
3         Adir Levy             4.8         8170       13      2019
  • La funcion agg() permite aplicar varias funciones al dataFrame una vez agrupado segun una columna especifica. Agrupar por Author y mostrar el minimo y maximo de las demas columnas
df_books.groupby('Author').agg(['min','max'])
---> #muestra cada columna dividida en dos: min y max. Estas contienen los valores maximo y minimo de la columna para cada Author 
  • Agrupar por Author, obtener el minimo y maximo de la columna Reviews y sumar los valores de la columna User Rating
df_books.groupby('Author').agg({'Reviews':['min','max'], 'User Rating':'sum'})
--->                 Reviews min    Reviews max    User Rating 
Abraham Verghese         4866           4866          9.2
Adam Gasiewski           3113           3113          4.4
Adam Mansbach            9568           9568          4.8
Adir Levy                8170           8170          4.8
  • Agrupar por Author - Year y contar los valores de las demas columnas
df_books.groupby(['Author','Year']).count()
--->                        Name    User Rating    Reviews    Price    Genre
('Abraham Verghese', 2010)   1           1            1         1        1
('Abraham Verghese', 2011)   1           1            1         1        1
('Adam Gasiewski', 2017)     1           1            1         1        1
('Adam Mansbach', 2011)      1           1            1         1        1

Agregue le m茅todo sort_values, que seria similar a order by (sql)

Que buen curso 鉁ㄢ湪lpm鉁ㄢ湪

Groupby


馃憞馃徎馃憞馃徎

.groupby( columna ) 鈫 filtrando grupos a partir de una columna o鈥 agregacion
|

| 鈽戯笍.groupby( columna ).agg*馃憞馃徎

Aqu铆 tienen un link donde se traducen sentencias SQL a Pandas, para que aquellos que ya conoc铆an SQL
https://www.linkedin.com/pulse/como-escribir-tus-consultas-sql-en-pandas-vs-carlos-villena-azua/?originalSubdomain=es

Para groupby se ve mucho mejor en colab que en deepnote

Puedes agregar y elegir que tipo de calculo hacer en cada caso, teniendo en cuenta el tipo y naturaleza del dato, as铆 como renombrar cada columna de salida, Por ejemplo:

df_group= df('field_group').agg(newfield1=('old_field1',sum), # sumar todos los valores
                                    newfield2=('old_field2',mean), # una media de todos los valores
                                    newfield3=('old field3',list).reset_index() # una lista con todos los elementos que se encontr贸 para esa categor铆a

Usando el metodo .apply().
En este caso para sumar el Rating total por Author.

Por si requieren ordernar el groupby

df_books.groupby('Author').count().reset_index().sort_values(by='Name', ascending=False)

Otra forma de usar lambda y cambiar el nombre a la columna ser铆a la siguiente:

df_books.groupby('Author').agg( 
						Precio_Promedio_Mil= ('Price', lambda x : sum(i * 1000 for i in x)),
					Rating_de_Usuario=('User Rating','mean')
							)

En Pandas se puede trabajar con m煤ltiples 铆ndices. GROUPBY puede trabajar con los 铆ndices individualmente por medio de par谩metro LEVEL.

df_books = pd.read_csv('/content/VIDEO 12 bestsellers-with-categories.csv',sep=',',header=0)
df_books.head(2)


Las columnas Author y a帽o las convierto en 铆ndices y lo ordeno para que se vea mejor.

df_books_isort =df_books.set_index(['Author','Year']).sort_index(ascending = [True,False] )
df_books_isort

LEVEL usado con etiquetas.

df_books_isort.groupby(level="Year").mean()

LEVEL usado el n煤mero de orden del 铆ndice.

df_books_isort.groupby(level=0).mean()
Tengo el Error con `.mean()` Alguien sabe como solucionarlo? Me funcionan los de otro tipo como `.min()`, `.max()`, pero me sigue fallando con .mean() Creo que tiene que ver con las columnas que no son numericas...

Informaci贸n resumida de esta clase
#EstudiantesDePlatzi

  • Puedo organizar mis datos en una variable com煤n, es decir, agruparlos por cierta condici贸n

  • Usando la funci贸n groupby puedo hacer que se agrupen definiendo la variable por la que quiero que se organicen

  • De manera simult谩nea puedo filtrar y realizar algunas operaciones con estos datos, es decir, puedo filtrar por cierta condici贸n y al mismo tiempo tener la suma de estos datos

  • Puedo realizar m煤ltiples combinaciones agrupando mis datos, ya sea por la llave de agrupamiento o por los resultados en funciones de agregaci贸n

  • Es importante entender las consultas de SQL

Gracias a la funci贸n groupby pude hacer lo que quer铆a con un dataframe con la columna 鈥楶rice鈥 en su mayor铆a lleno de NaN, quer铆a llenar valores faltantes pero no por la media de todo el dataframe si no de cada compa帽铆a 鈥楥ompany鈥, primero fue poderles cambiar el tipo de Object a float ya que no me lo permit铆a por los str.

df['Price'] = pd.to_numeric(df['Price'],errors = 'coerce')

despu茅s lo que por fin pude resolver, que aliviada me siento la verdad.

df['Price'] = df.groupby('Company').transform(lambda x: x.fillna(x.mean()))

`books.groupby(['Author','Name'], group_keys=True)[['User Rating','Reviews','Price','Year']].apply(lambda x: x * -1)` Con este comando aplico una funci贸n Lambda a mis datos. Hago una agrupaci贸n por Autor y Nombre, selecciono solo las columnas "\['User Rating','Reviews','Price','Year']" para mostrarlas en la salida, y aplico la funci贸n lambda que para el ejemplo consta de multiplicar por "-1" ![](https://static.platzi.com/media/user_upload/image-25e4b1e5-c915-4f3f-b7c2-646f1f1d1a3c.jpg)

mi tarea:!

18. Groupby

import pandas as pd

df_books = pd.read_csv('/content/bestsellers-with-categories_e591527f-ae45-4fa5-b0d1-d50142128fa6.csv')
df_books.head(2) #traer los n primeros registros de mi notebook

df_books.groupby('Author').count() #Agrupar por...

df_books.groupby('Author').count().reset_index

df_books.groupby('Author').agg(['min','max'])

df_books.groupby('Author').agg({'Reviews':['min','max'], 'User Rating':'sum'})

df_books.groupby(['Author','Year']).count

Una suma de todo en una linea 鈥

df_books[df_books[鈥榊ear鈥橾 > 2016].iloc[:,1:5].groupby(鈥楢uthor鈥).agg({鈥楿ser Rating鈥:[鈥榗ount鈥,鈥榤ax鈥橾,鈥楻eviews鈥:鈥榤in鈥,鈥楶rice鈥:鈥榮um鈥檥)

.agg

Esta funcionalidad da mucha m谩s libertad a la hora de trabajar con Pandas 馃憤馃殌馃敟

Esta es la estructura general de la funci贸n groupby seg煤n los recursos del curso:

DataFrame.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=_NoDefault.no_default, squeeze=_NoDefault.no_default, observed=False, dropna=True)

Agrupar datos

  • Para agrupar datos en pandas usamos el m茅todo groupby() y luego podemos aplicar una funcion de agregaci贸n (sea count, mean, min, max鈥), o podemos aplicar varias funciones con el m茅todo agg: agg([functions]), ejemplos:
df.groupby('n_col').max()
df.groupby('n_col').agg(max,mean)
df.groupby(['col1','col2']).agg('col3':['sum',mean], 'col4':'sum')
	Name	User Rating	Reviews	Price	Genre

Author Year
Abraham Verghese 2010 1 1 1 1 1
2011 1 1 1 1 1
Adam Gasiewski 2017 1 1 1 1 1
Adam Mansbach 2011 1 1 1 1 1
Adir Levy 2019 1 1 1 1 1
鈥 鈥 鈥 鈥 鈥 鈥 鈥
Wizards RPG Team 2017 1 1 1 1 1
2018 1 1 1 1 1
2019 1 1 1 1 1
Zhi Gang Sha 2009 1 1 1 1 1
2013 1 1 1 1 1

Existe una alternativa dentro de pandas llamada pivot_table. Sin duda mi opci贸n favorita cuando deseo agrupar datos 馃槃.

Mis apuntes #19

El uso de groupby pudiendo filtrar por un solo Author es fabuloso, me emocion茅 al pensar que puedo generar fichas de por ejemplo Hospitales, Municipios, Departamentos, Pa铆ses

Lo que le dicen la emoci贸n del nuevo jajajjajajajaj

reto

Permite agrupar datos en funci贸n de los dem谩s. Es decir, hacer el an谩lisis del DataFrame en funci贸n de una de las columnas.
Agrupar por Autor y mostrar el conteo de los datos de las dem谩s columnas
la agrupaci贸n es agrupar los datos que tienen algo en com煤n en mi data frame
________________________________________
[1]
import pandas as pd
________________________________________
[22]
0 s
df_movie = pd.read_csv("/content/movies_.csv",sep=",",header=0)
df_movie.head(10)
________________________________________
[6]
df_books.groupby("genres").count()
#aca puedo saber cuantos registros hay en mi data frame en cada genero 
#agrpuando por una columna especifica como lo generes 
#que quiero de agregaci贸n 
________________________________________
[23]
0 s
df_movie.groupby("genres").mean ()
#tambien puedo saver los valores de la columna con mean, max, min
________________________________________
[24]
0 s
df_movie.groupby("genres").max()
________________________________________
[9]
df_movie.groupby("genres").sum()
#tambiem puedo sumar los valores aca me esta cumado aca columna en general,
#si detallamos bien genres, esta mas abajo que las demas, eso es porque esta en este momento no es 
# una columna es el 铆ndice de mi data frame 
________________________________________
[10]
df_movie.groupby("genres").sum().loc["Action|Adventure"]
#como este el ince puedo entrar por loc y puedo sacar el resultado que es un agrupamiento espesificos 
#de (Action|Adventure) en cuantos a sumas 
movie            1108725
year               63588
Rating               175
Rotton Tomato       2386
Name: Action|Adventure, dtype: int64
________________________________________
[11]
df_movie.groupby("genres").sum().reset_index()
#con esta funcion genres pasa a ser parte de nuevo a columnas y el index queda a parte y el resto 
#de las columnas es la suma  el data frame original que teniamos en un comienso  
# de esta manera podemos agrupar valores y sacar cualquier valor de agregacion
________________________________________
[12]
df_movie.groupby("genres").agg(["min","max"])
#con esta funcion puedo  agregar funciones de agrupamienro, genres pasa a ser el index, y quiero 
#saber a nivel de (min y max) por cada columna que estoy trabajando, esto lo hacemos cuando queremos 
#dos m茅tricas distintas 
________________________________________
[14]
df_movie.head(2)
________________________________________
[17]
df_movie.groupby("genres").agg({"year":["min","max"], "Rating": "sum"})
#asi puedo trabajar con cada una de las columnas o con cada una de las funciones de agregacion que tengo puedo trabajar bastante 
________________________________________
[25]
0 s
df_movie.groupby(["genres","title","year"]).count()
#aca se estan combinando multiples datos ya sea por la lleve de  agrupamiento o por la lleve que quiero de agregacion  
________________________________________
hacer agregaciones o agrupaciones en pandas es muy sencillo. arrastra mucho la l贸gica de SQL, se modo de hacer agregaciones es el que transfiri贸 a pandas y es bastante 煤til al hacer estas agregaciones a nuestro data set
________________________________________
[19]
0 s
tips = pd.read_csv("/content/movies_.csv")
________________________________________
[20]
0 s
tips
________________________________________
[21]
0 s
tips.groupby("genres").size()
genres
(no genres listed)                     18
Action                                 39
Action|Adventure                       32
Action|Adventure|Animation             14
Action|Adventure|Animation|Children     3
                                       ..
Sci-Fi|Thriller                        13
Sci-Fi|Thriller|IMAX                    1
Thriller                               74
War                                     6
Western                                31
Length: 902, dtype: int64


Agrupamiento compuesto

aggregation por columnas especificas

Para recordar : Loc me permmite seleccionar datos a traves de susu indices y iloc me lo permite a traves de su posici贸n dentro del dataframe