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.

Distribución en percentiles desde el dataframe.

Si tengo el siguiente DataFrame, df, con millones de variables.

Mi problema es,

¿Cómo puedo estudiar la distribución de cada percentil?

Entonces, mi idea era dividir “score” en percentiles y ver qué porcentaje corresponde a cada uno.

Me gustaría obtener algo como

percentil cantidad_de_indices porcentaje
1 154.000 %20
2 100.320 %17
3 250.000 %21

donde “cantidad_de_indices” es el número de Id diferentes y “porcentaje” es el porcentaje que representa el primer, segundo, … percentil.

Para esto, obtengo df[‘porcentaje’] = df[‘score’] / df[‘score’].sum() * 100, pero esto es el porcentaje de todos los datos.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para estudiar la distribución de cada percentil, puedes usar la función qcut() de pandas para dividir la columna score en grupos de percentiles iguales. Luego, puedes agrupar los datos por estos grupos y contar la cantidad de valores únicos de id que caen en cada grupo. Por último, puedes calcular el porcentaje del total de valores de id que caen en cada grupo.

    Aquí tienes un ejemplo de código que hace esto:

    import pandas as pd
    
    # crea un dataframe de ejemplo
    df = pd.DataFrame({
        'id': [140, 142, 148, 166, ...],
        'score': [0.1223, 0.01123, 0.1932, 0.0226, ...]
    })
    
    # divide la columna score en 10 grupos de percentiles
    df['percentil'] = pd.qcut(df['score'], q=10, labels=False)
    
    # agrupa por percentil y cuenta los valores únicos de id
    agrupado = df.groupby('percentil')['id'].nunique().reset_index()
    agrupado.columns = ['percentil', 'cantidad']
    
    # calcula el porcentaje del total de valores de id
    total = df['id'].nunique()
    agrupado['porcentaje'] = agrupado['cantidad'] / total * 100
    
    # imprime los resultados
    print(agrupado)
    

    Este código divide la columna score en 10 grupos de percentiles utilizando pd.qcut(), lo cual crea una nueva columna percentil. El argumento labels=False significa que los valores de retorno son números de grupos (0-9) en lugar de etiquetas de grupos (es decir, del 0-10%).

    A continuación, el código agrupa el dataframe por percentil y cuenta la cantidad de valores únicos de id utilizando .groupby() y .nunique(). El dataframe resultante se renombra a agrupado y contiene las columnas percentil, cantidad y porcentaje.

    Por último, el código calcula el porcentaje del total de valores de id que caen en cada grupo dividiendo cantidad por el número total de valores únicos de id (df['id'].nunique()) y multiplicando por 100.

    El dataframe resultante agrupado contiene la cantidad y el porcentaje de valores únicos de id para cada grupo de percentiles, lo cual te permitirá estudiar la distribución de cada percentil.

Comments are closed.