Pandas GroupBy – Contar el último valor

Una operación groupby implica agrupar grandes cantidades de datos y operaciones informáticas en estos grupos. Generalmente está involucrado en alguna combinación de dividir el objeto, aplicar una función y combinar los resultados. En este artículo, veamos cómo obtener el recuento del último valor en el grupo usando pandas.

Sintaxis:

DataFrame.groupby(by, axis, as_index)

Parámetros:

  • por (lista de tipos de datos, tuplas, dict, serie, array): mapeo, función, etiqueta o lista de etiquetas. La función pasada se usa tal cual para determinar los grupos.
  • eje (tipo de datos int, predeterminado 0): 1: divide columnas y 0: divide filas.
  • as_index (tipo de datos bool, predeterminado True.): Devuelve un objeto con etiquetas de grupo como índice, para toda la salida agregada,

Método 1: Usar la función GroupBy & Aggregate

En este enfoque, el usuario debe llamar a la función DataFrame.groupby() para demostrar cómo obtener el recuento del último valor en el grupo usando pandas en el lenguaje python.

Ejemplo:

En este ejemplo, creamos un marco de datos de muestra con los nombres y precios de los autos como se muestra y aplicamos la función groupby en los autos, establecer as_index falso no crea un nuevo índice y luego agregamos la función agrupada por el último precio de los autos usando el ‘último’ parámetro en la función agregada y nombre la columna ‘Price_last’. Seguido de eso, agregue otra función lambda para obtener la cantidad de veces que el automóvil obtuvo el último precio.

El marco de datos utilizado en el siguiente ejemplo:

     cars     Price_in_million
0     benz     15
1     benz     12
2     benz     23
3     benz     23
4     bmw     63
5     bmw     34
6     bmw     63

Python3

# import python pandas package
import pandas as pd
 
# create a sample dataframe
data = pd.DataFrame({'cars': ['benz', 'benz', 'benz',
                              'benz', 'bmw', 'bmw', 'bmw'],
                     'Price_in_million': [15, 12, 23, 23,
                                          63, 34, 63]})
 
 
# use groupby function to groupby cars, setting
# as_index false doesnt create an index.
# use aggregate function with 'last; parameter
# to get the last price im the group of cars.
# apply lambda function to get the number of
# times the car got the last price.
data.groupby('cars', as_index=False).agg(Price_last=('Price_in_million', 'last'),
                                         Price_last_count=('Price_in_million',
                                                           lambda x: sum(x == x.iloc[-1])))

Producción:

Método 2: Uso de la función Lambda

En este método, el usuario debe llamar a la función lambda utilizada anteriormente para devolver el recuento de las filas correspondientes presentes en el marco de datos en el lenguaje de programación R.

Ejemplo:

En este ejemplo, como puede ver, el automóvil: BMW y el precio 63 corresponde a la cuarta fila del conjunto de datos. Al aplicar la función lambda como se indicó anteriormente, se obtiene que el automóvil BMW está presente tres veces y el precio 63 está presente 2 veces.

Python3

# import python pandas package
import pandas as pd
 
# create a sample dataframe
data = pd.DataFrame({'cars': ['benz', 'benz', 'benz',
                              'benz', 'bmw', 'bmw', 'bmw'],
                     'Price_in_million': [15, 12, 23, 23, 63, 34, 63]})
 
# get the 4th row present in the data
data.iloc[4]
 
# Now apply lambda function to get the number
# of times the row is present in the dataset
data.apply(lambda x: sum(x==x.iloc[4]))

Producción:

Método 3: Usando GroupBy, pandas Merge & Aggregate función

 El conteo del último valor en el grupo que usa pandas también se puede obtener usando la función de combinación de pandas de la siguiente manera.

Sintaxis:

DataFrame.merge(right, how='inner', on=None)

Parámetros:

  • derecha : objeto con el que fusionarse. (trama de datos u objeto de serie).
  • cómo : combinación izquierda, combinación derecha, combinación externa, Predeterminado: combinación interna
  • on – (etiqueta o lista). Especifique los nombres de columna para unirse.

Ejemplo:

En este ejemplo, creamos un marco de datos de muestra con los nombres y precios de los autos como se muestra y aplicamos la función groupby en los autos, y usamos la función tail() para calcular el valor final del grupo. Ahora, realice una combinación interna con el conjunto de datos agrupados y el conjunto de datos original. Finalmente, aplique una función groupby agregada de conteo para obtener el no. de ocurrencias del último valor.

Python3

# import pandas package
import pandas as pd
# create a sample dataset
data = pd.DataFrame({'cars': ['benz', 'benz', 'benz',
                              'benz', 'bmw', 'bmw', 'bmw'],
                     'Price_in_million': [15, 12, 23, 23, 63, 34, 63]})
 
# perform inner merge with the grouped and original dataset
merged = pd.merge(data.groupby('cars').tail(1), data, how='inner')
 
# apply a count aggregated groupby function to
# get the no. of. occurrences of last value.
result = merged.groupby(['cars', 'Price_in_million'])[
    'Price_in_million'].agg('count')
print(result)

Producción:

Método 4: usar la función GroupBy, pandas Merge y Sum

También podemos obtener el mismo resultado alterando ligeramente el enfoque anterior, usando la función last() en lugar de tail() , como se muestra a continuación,

Ejemplo:

En este ejemplo, creamos un marco de datos de muestra con los nombres y precios de los autos como se muestra, aplicamos la función groupby en los autos y usamos la función last() para encontrar el elemento final de cada grupo y combinar internamente el conjunto de datos agrupados con el conjunto de datos original. Ahora compare los dos precios en las columnas fusionadas y cree una nueva columna de tipo de datos bool, donde los precios coincidan. Ahora use la función groupby para obtener el número de veces que se repite el último valor del grupo.

Python3

# import pandas package
import pandas as pd
 
# create a sample dataset
data = pd.DataFrame({'cars': ['benz', 'benz', 'benz',
                              'benz', 'bmw', 'bmw', 'bmw'],
                   'Price_in_million': [15, 12, 23, 23, 63, 34, 63]})
 
# computes the final value of each group
grouped = data.groupby('cars').last()
 
# Merge dataset named "data" with this result
data = data.merge(grouped, left_on='cars', right_index=True, how='inner')
 
# Now compare the merged columns for same price
# and create a new column of boolean values
# where prices match
data['count'] = data['Price_in_million_x'] == data['Price_in_million_y']
 
# Use groupby function to return the aggregated
# sum of count column where the price matches
data.groupby('cars')['count'].sum()

Producción:

Publicación traducida automáticamente

Artículo escrito por jssuriyakumar y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *