Instrucciones de uso de pandas groupby

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

inserte la descripción de la imagen aquí

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

inserte la descripción de la imagen aquí
tail y last son el último conjunto de datos agrupados.
cola incluye todas las columnas

df.groupby('product').tail(1)

inserte la descripción de la imagen aquí
last incluye solo columnas de datos.

df.groupby('product').last(1)

inserte la descripción de la imagen aquí
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)

inserte la descripción de la imagen aquí

df.groupby('product').nth(1)

El grupo medio de datos agrupados, el efecto es el siguiente:
inserte la descripción de la imagen aquí

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:
inserte la descripción de la imagen aquí

(2) Agregación de varias columnas

df.groupby('product').agg({'score1':np.sum, 'score2':np.mean, 'score3':np.std})

El efecto es el siguiente:
inserte la descripción de la imagen aquí
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:
inserte la descripción de la imagen aquí

(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
inserte la descripción de la imagen aquí
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:
inserte la descripción de la imagen aquí

df.groupby('product').filter(lambda x: x['score3'].mean()<75)

El resultado es el siguiente:
inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/qq_39065491/article/details/131104146
Recomendado
Clasificación