[Turn] Procesamiento de datos de Pandas (4) - procesamiento de agrupamiento y agrupamiento (Agrupamiento)

Procesamiento de datos de Pandas (4) - procesamiento de agrupamiento y agrupamiento (Agrupamiento)

 

Comprensión del grupo

Al procesar datos, en una lista de datos, los elementos de una determinada columna se utilizarán como punto base de referencia, y cada elemento único en la columna se contará correspondiente a los datos relacionados de otras columnas. Aquí puedo describirlo como más Puede utilizar las siguientes dos tablas de datos para ayudar a comprender antes y después del procesamiento:

Los datos de origen tienen 5 columnas, a saber, edad, sexo, ocupación y código postal;

 

 

A continuación, necesito agrupar y analizar la columna de ocupación (ocupación) y contar los valores máximo, mínimo y promedio de género y edad para cada tipo de ocupación. Los resultados del procesamiento son los siguientes:

 

 

Arriba hay una breve introducción de la agrupación de clústeres, el paquete Pandas proporciona funciones de  operación  diaria de goupby , el documento se basará en  Pandas  de  groupby  haciendo uso de una comprensión simple

1. Importación de biblioteca, lectura de datos

import pandas as pd
​
users = pd.read_table("https://raw.githubusercontent.com/justmarkham/DAT8/master/data/u.user",sep ="|",index_col = 'user_id')
users.head()

Los datos se almacenan en el conjunto de datos con edad, género, ocupación y código postal como muestra, y el siguiente procesamiento se centrará en las tres columnas de edad, género y ocupación como objetos de análisis;

 

 

2. Convierta el género en forma de codificación

def gender_to_numric(x):
    if x=='M':
        return 1
    if x =="F":
        return 0
​
# 利用新的函数创建新的列;
users['gender_n'] = users['gender'].apply(gender_to_numric)
users

F se convierte en 0, M se establece en 1

 

 

3. Bajo la premisa de 2, calcule la proporción de hombres en cada ocupación.

value_counts () Cuenta el número total de muestras en una columna

a = users.groupby("occupation").gender_n.sum()/users.occupation.value_counts()*100
a.sort_values(ascending =False)

Luego ordene de mayor a menor

 

4. Tome la ocupación como el punto base de la agrupación y cuente la edad más vieja, más joven y promedio de cada ocupación.

La función agg () se usa aquí para lograr el efecto de agrupación de la canalización de datos

users.groupby("occupation").age.agg(["min","max","mean"])

 

 

Cuando se realizan estadísticas en varias columnas de datos al mismo tiempo, también se usa la función agg (). La diferencia es que aquí se usa la forma del diccionario (dict): el nombre de la clave es el nombre de la columna y el valor de la clave es el categoría de datos que debe contarse, como máximo, mínimo, medio, recuento y otras palabras clave, escritas en forma de lista;

users.agg ({列 名: [“mean”, “max”, "min"]})

Según los datos de este artículo, si desea ver las estadísticas de edad y género al mismo tiempo, puede usar el siguiente comando;

users.groupby("occupation").agg({"age":['mean','max','min'],'gender_n':['sum','count']})

 

 

5. Agrupación y agrupación en clústeres de varias columnas

Arriba hemos realizado un análisis de agrupamiento y conglomerado en la columna de ocupación, aquí, en el agrupamiento de ocupaciones, se agrupa y agrupa el género, y se calcula la proporción total de cada género en cada ocupación.

groupby (['列 名 1', '列 名 2' ...]) # La secuencia de nombres de columnas representa la secuencia de agrupamiento en clústeres:

# 求在每个职业中男女各占比例
gender_occp = users.groupby(["occupation","gender"]).agg({"gender":"count"})
gender_occp

 

 

6. Sobre la base de 5, calcule la proporción de género en cada ocupación.

La idea básica de calcular la proporción de género en cada ocupación es la siguiente:

  • 1. Cuente el número de géneros en cada ocupación;
  • 2. Contar el número total de muestras en cada ocupación;
  • 1 y 2 se dividen según la columna de ocupación;

Parte de código

# 求在每个职业中男女各占比例
gender_occp = users.groupby(["occupation","gender"]).agg({"gender":"count"})
​
# 为每一个职业计算 count
occup_count = users.groupby(['occupation']).agg("count")
​
# gender_occp
​
# 进行除法运算
occup_gender = gender_occp.div(occup_count,level = "occupation")*100
​
​
# 只筛选出 gender列
occup_gender.loc[:,'gender']

La función DataFram.div se usa aquí para dividir dos DataFrames basados ​​en una determinada columna como columna de referencia. El tipo de datos final es float; el parámetro de nivel se usa para especificar la columna de referencia; además de div, Pandas también proporciona agregar, funciones de operación sub, mul como, pow, etc., el uso es similar al método div

El resultado final es el siguiente:

 

 

Lo anterior es el contenido básico de este artículo, ¡gracias por leer al final!

Supongo que te gusta

Origin blog.csdn.net/weixin_52071682/article/details/112421341
Recomendado
Clasificación