Instrucciones de uso de pandas groupby
1. Descripción de la función
De acuerdo con el documento oficial para explicar la función groupby, puede consultar la operación de agrupación en SQL para su comprensión.
Por "agrupar por" nos referimos a un proceso que implica uno o más de los siguientes pasos:
- Dividir los datos en grupos según algunos criterios.
- Aplicar una función a cada grupo de forma independiente.
- Combinar los resultados en una estructura de datos
Hay tres pasos principales: - Agrupar por datos condicionales
- Aplicar el procesamiento de funciones a cada dato agrupado individual
- Los resultados se combinan en la estructura de
datos.Procesamiento y uso de datos:
Agregación : agregación, sum mean std max min var, etc.
Transformación : conversión, puede estandarizar datos, manejar valores nulos
Filtración : filtrar, filtrar datos según funciones de agrupación , como suma media
A continuación se presenta la agrupación , seguida de la agregación, la transformación y el filtrado
2. Agrupación de datos
(1) Preparación de datos
df = pd.DataFrame(
{
"product": ['computer','printer','pad','computer','printer','pad','computer','printer'],
"month": ['1月','2月','3月','4月','1月','2月','3月','4月'],
"score1": np.random.randint(60,100,8),
"score2": np.random.randint(60,100,8),
"score3": np.random.randint(60,100,8)
})
df
(2) Agrupación
groupby primero debe especificar el principio de agrupación, el primer paso de la función groupby, y sus parámetros comunes incluyen:
por, campo de agrupación, puede ser nombre de columna/serie/diccionario/función, comúnmente utilizado como nombre de columna
- eje, especifica la dirección de división, el valor predeterminado es 0, lo que significa dividir a lo largo de la línea
- as_index, ya sea para usar el nombre de la columna de agrupación como índice de salida, el valor predeterminado es True; cuando se establece en False, es equivalente a agregar la función reset_index
- sort, que es coherente con la clasificación predeterminada realizada por la operación groupby en SQL. El groupby también puede especificar si ordenar los resultados de salida por índice a través del parámetro sort
Agrupar por producto:
df.groupby('product',as_index=False)
Tenga en cuenta que df.groupby('producto',as_index=False) es un objeto de agrupación, no un marco de datos, lo cual es un poco difícil de entender al principio.
Resumen:
El proceso de groupby consiste en dividir el DataFrame original en varios sub-DataFrames de acuerdo con los campos de groupby.Hay tantos sub- DataFrames como grupos .
Una serie de operaciones después de groupby (como agregar, aplicar, etc.) se basan en operaciones de sub-DataFrame .
Después de comprender esto, básicamente podemos comprender los principios fundamentales de la operación de objetos agrupados en Pandas.
<objeto pandas.core.groupby.generic.DataFrameGroupBy en 0x7f6a16ccdfd0>
Eche un vistazo al contenido del objeto de agrupación.
El nombre del grupo se puede nombrar a voluntad, y el nombre corresponde a la columna de agrupación.
for name, group in df.groupby('product'):
print(name)
print(group)
Es más fácil entender el objeto de agrupación ejecutando el resultado:
computer
product month score1 score2 score3
0 computer 1月 66 66 90
3 computer 4月 89 91 84
6 computer 3月 88 88 63
pad
product month score1 score2 score3
2 pad 3月 72 63 82
5 pad 2月 69 79 60
printer
product month score1 score2 score3
1 printer 2月 69 62 75
4 printer 1月 91 87 97
7 printer 4月 73 69 84
(3) Agrupación combinada
Agrupar por producto mes dos columnas:
for name, group in df.groupby(['product','month']):
print(name)
print(group)
nombre es la agrupación de dos valores, el resultado es el siguiente:
('computer', '1月')
product month score1 score2 score3
0 computer 1月 66 66 90
('computer', '3月')
product month score1 score2 score3
6 computer 3月 88 88 63
('computer', '4月')
product month score1 score2 score3
3 computer 4月 89 91 84
('pad', '2月')
product month score1 score2 score3
5 pad 2月 69 79 60
('pad', '3月')
product month score1 score2 score3
2 pad 3月 72 63 82
('printer', '1月')
product month score1 score2 score3
4 printer 1月 91 87 97
('printer', '2月')
product month score1 score2 score3
1 printer 2月 69 62 75
('printer', '4月')
product month score1 score2 score3
7 printer 4月 73 69 84
O use la función de lista para mostrar el contenido del objeto groupby.
list(df.groupby(['product','month']))
(4) primera cola enésima
El primer grupo de datos agrupados después de agrupar
la almohadilla de la impresora de la computadora Los datos que aparecen por primera vez:
df.groupby('product').first(1)
tail y last son el último conjunto de datos agrupados.
cola incluye todas las columnas
df.groupby('product').tail(1)
last incluye solo columnas de datos.
df.groupby('product').last(1)
La función nth es mostrar el grupo Nth de datos agrupados, lo cual es conveniente para consultar datos de la parte media del grupo.
Muestra el tercer grupo de datos agrupados, comenzando desde 0. Este ejemplo es el último grupo de datos agrupados sin productos de relleno.
df.groupby('product').nth(2)
df.groupby('product').nth(1)
El grupo medio de datos agrupados, el efecto es el siguiente:
3. Agregación
(1) Agregación agregada de una sola columna
df.groupby('product')['score1'].agg([np.sum, np.mean, np.std])
La suma, la media y la desviación estándar de score1, el efecto es el siguiente:
(2) Agregación de varias columnas
df.groupby('product').agg({'score1':np.sum, 'score2':np.mean, 'score3':np.std})
El efecto es el siguiente:
se puede comparar el SQL correspondiente, que es más fácil de entender:
select sum(score1),mean(score2),std(score3) from df group by product ;
(3) Cálculo de agregación múltiple de varias columnas
df.groupby('product').agg({'score1':[np.sum,np.max], 'score2':[np.mean,np.min], 'score3':[np.std,np.var]})
El efecto es el siguiente:
(4) aplicar
La función de aplicación es una función de conversión muy utilizada. Por ejemplo, para objetos de serie , la granularidad de procesamiento de la función de aplicación es cada elemento de la serie (escalar); para objetos de marco de datos , la granularidad de procesamiento de la función de aplicación es una fila o columna del marco de datos objeto de marco de datos secundario )
Por ejemplo: calcular la diferencia media de dos columnas
df.groupby('product').apply(lambda x: x['score3'].mean()-x['score1'].mean())
El resultado es el siguiente:
product
computer -2.000000
pad 0.500000
printer 7.666667
dtype: float64
4. Transformación
Se obtiene el resultado correspondiente para cada dato, y las muestras de un mismo grupo tendrán el mismo
valor, que es una correspondencia uno a uno a través del índice.
df.groupby('product')['score1'].transform('mean')
El resultado es el siguiente:
0 81.000000
1 77.666667
2 70.500000
3 81.000000
4 77.666667
5 70.500000
6 81.000000
7 77.666667
Name: score1, dtype: float64
Agregue directamente una nueva columna al resultado de la operación de agregación a través de la transformación. El valor promedio de score1, agregue una nueva columna.
df['avg_score1'] = df.groupby('product')['score1'].transform('mean')
Correspondientes a los productos de computadora, todos tienen el mismo valor, y el efecto es el siguiente: la diferencia entre
transform y agg , para agg , calculará el valor medio correspondiente a diferentes productos y lo devolverá directamente , pero para transform , lo hará calcule el valor medio de cada producto Los resultados correspondientes se obtienen de los datos, las muestras en el mismo grupo tendrán el mismo valor y los resultados se devolverán en el orden del índice original después de calcular el valor medio en el grupo .
El índice en este ejemplo es 01234567.
5. Filtración
El filtrado condicional se realiza a través de funciones agregadas, similar a tener cláusulas en SQL.
df.groupby('product').filter(lambda x: x['score1'].mean()>80)
El efecto es el siguiente:
df.groupby('product').filter(lambda x: x['score3'].mean()<75)
El resultado es el siguiente: