Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

groupby

18/24
Recursos

Aportes 14

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta 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.

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

¿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?

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.

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()

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

Para groupby se ve mucho mejor en colab que en deepnote

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

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

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

Groupby


–

👇🏻👇🏻

✅ .groupby( columna ) → filtrando grupos a partir de una columna o… agregacion
|

| ☑️.groupby( columna ).agg*👇🏻

Que buen curso ✨✨lpm✨✨