es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Porcentaje de clusters totales por cluster por temporada utilizando pandas

Tengo un DataFrame de pandas que se ve como esto con un total de 12 grupos. Ciertos grupos no aparecen en ciertas temporadas.

Quiero crear un gráfico de varias líneas sobre las temporadas del porcentaje de un grupo específico en cada temporada. Entonces, si hay 30 equipos en la temporada 97-98 y hay 10 equipos en el Grupo 1, ese valor sería 0.33 ya que el Grupo 1 tiene un tercio de los lugares totales posibles.

Se verá como esto.

Y quiero que el conjunto de datos se vea como esto, donde cada grupo tiene su propio porcentaje del número total de grupos en esa temporada por porcentaje. He intentado usar el método groupby de pandas para obtener una serie de listas y luego usar value_counts() en eso, pero eso no funciona porque iterar a través de df.groupby(['SEASON']) devuelve tuplas, no una Serie.

Muchas gracias.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para crear un gráfico de líneas múltiples del porcentaje de un clúster específico en cada temporada, podemos seguir estos pasos:

    1. En primer lugar, podemos agrupar el DataFrame por la columna SEASON y contar el número de clústeres en cada temporada utilizando grouped['CLUSTER'].nunique(). Esto nos dará el número total de clústeres en cada temporada.
    2. Luego, podemos agrupar el DataFrame por las columnas SEASON y CLUSTER y contar el número de ocurrencias de cada clúster en cada temporada utilizando grouped['CLUSTER'].value_counts(). Esto nos dará el recuento de cada clúster en cada temporada.

    3. A continuación, podemos calcular el porcentaje de cada clúster en cada temporada utilizando la fórmula (cluster_count/total_clusters)*100. Esto nos dará el porcentaje de cada clúster en cada temporada.

    4. Finalmente, podemos trazar un gráfico de líneas múltiples con cada línea correspondiente a un clúster diferente en cada temporada. Podemos usar la biblioteca matplotlib o seaborn para crear este gráfico.

    Aquí está el código para lograr esto:

    import pandas as pd
    import seaborn as sns
    import matplotlib.pyplot as plt
    
    # Cargar el DataFrame
    df = pd.read_csv('data.csv')
    
    # Agrupar el DataFrame por la columna SEASON
    grouped = df.groupby('SEASON')
    
    # Contar el número total de clústeres en cada temporada
    total_clusters = grouped['CLUSTER'].nunique()
    
    # Agrupar el DataFrame por las columnas SEASON y CLUSTER
    cluster_counts = grouped['CLUSTER'].value_counts()
    
    # Calcular el porcentaje de cada clúster en cada temporada
    percentages = (cluster_counts/total_clusters)*100
    
    # Desapilar el DataFrame de porcentajes para crear columnas separadas para cada clúster
    percentages_unstacked = percentages.unstack()
    
    # Trazar el gráfico de líneas múltiples
    sns.set_style("darkgrid")
    plt.figure(figsize=(12,8))
    for column in percentages_unstacked.columns:
        plt.plot(percentages_unstacked[column], label=column)
    plt.xlabel('Temporada')
    plt.ylabel('Porcentaje de Clúster')
    plt.title('Porcentaje de cada Clúster en Temporadas')
    plt.legend(loc='center left', bbox_to_anchor=(1, 0.5))
    plt.show()
    

    Esto trazará un gráfico de líneas múltiples con cada línea correspondiente a un clúster diferente en cada temporada. El eje x representará la temporada y el eje y representará el porcentaje de cada clúster en esa temporada.

    Para crear un conjunto de datos con cada clúster teniendo su propio porcentaje del número total de clústeres en esa temporada por porcentaje, podemos usar el mismo código mencionado anteriormente para calcular los porcentajes. Sin embargo, podemos desapilar el DataFrame de porcentajes para crear columnas separadas para cada clúster y luego restablecer el índice para crear un nuevo DataFrame con el porcentaje de cada clúster en cada temporada.

    Aquí está el código para lograr esto:

    import pandas as pd
    
    # Cargar el DataFrame
    df = pd.read_csv('data.csv')
    
    # Agrupar el DataFrame por la columna SEASON
    grouped = df.groupby('SEASON')
    
    # Contar el número total de clústeres en cada temporada
    total_clusters = grouped['CLUSTER'].nunique()
    
    # Agrupar el DataFrame por las columnas SEASON y CLUSTER
    cluster_counts = grouped['CLUSTER'].value_counts()
    
    # Calcular el porcentaje de cada clúster en cada temporada
    percentages = (cluster_counts/total_clusters)*100
    
    # Desapilar el DataFrame de porcentajes para crear columnas separadas para cada clúster
    percentages_unstacked = percentages.unstack()
    
    # Restablecer el índice para crear un nuevo DataFrame con el porcentaje de cada clúster en cada temporada
    result = pd.DataFrame(percentages_unstacked.to_records())
    
    # Renombrar las columnas para que coincidan con el conjunto de datos de ejemplo
    result = result.rename(columns={'CLUSTER 1': 'C1%', 'CLUSTER 2': 'C2%', 'CLUSTER 3': 'C3%', 'CLUSTER 4': 'C4%', 'CLUSTER 5': 'C5%', 'CLUSTER 6': 'C6%', 'CLUSTER 7': 'C7%', 'CLUSTER 8': 'C8%', 'CLUSTER 9': 'C9%', 'CLUSTER 10': 'C10%', 'CLUSTER 11': 'C11%', 'CLUSTER 12': 'C12%'})
    
    # Establecer el índice en la columna SEASON
    result = result.set_index('SEASON')
    
    # Imprimir el resultado
    print(result)
    

    Esto nos dará un nuevo DataFrame con el porcentaje de cada clúster en cada temporada, donde cada clúster tiene su propio porcentaje del número total de clústeres en esa temporada por porcentaje.

Comments are closed.