88 votes

Passer les percentiles à la fonction agg de pandas

Je veux passer le numpy percentile() par l'intermédiaire de la fonction agg() comme je le fais ci-dessous avec diverses autres fonctions statistiques numpy.

Actuellement, j'ai un cadre de données qui ressemble à ceci :

AGGREGATE   MY_COLUMN
A           10
A           12
B           5
B           9
A           84
B           22

Et mon code ressemble à ceci :

grouped = dataframe.groupby('AGGREGATE')
column = grouped['MY_COLUMN']
column.agg([np.sum, np.mean, np.std, np.median, np.var, np.min, np.max])

Le code ci-dessus fonctionne, mais je veux faire quelque chose comme

column.agg([np.sum, np.mean, np.percentile(50), np.percentile(95)])

C'est-à-dire, spécifier les différents percentiles à retourner à partir de agg() .

Comment faire ?

4voto

Vous pouvez peut-être aussi utiliser lambda pour obtenir le même résultat. Quelque chose comme le morceau de code ci-dessous :

        agg(
            lambda x: [
                np.min(a=x), 
                np.percentile(q=25,a=x), 
                np.median(a=x), 
                np.percentile(q=75,a=x), 
                np.max(a=x)
    ]
)

1voto

Jose Rondon Points 84

Cela peut permettre une certaine personnalisation :

list_statistics = ['count','mean','min',lambda x: np.percentile(x,q=25),'max',lambda x: np.percentile(x,q=75)]
cols_to_rename = {'<lambda_0>':'P25','<lambda_1>':'P75'}
df_out.groupby('Country').agg(list_statistics).rename(columns=cols_to_rename)

0voto

Fakira Points 9

La fonction multiple peut être appelée comme ci-dessous :

import pandas as pd

import numpy as np

import random

C = ['Ram', 'Ram', 'Shyam', 'Shyam', 'Mahima', 'Ram', 'Ram', 'Shyam', 'Shyam', 'Mahima']

A = [ random.randint(0,100) for i in range(10) ]

B = [ random.randint(0,100) for i in range(10) ]

df = pd.DataFrame({ 'field_A': A, 'field_B': B, 'field_C': C })

print(df)

d = df.groupby('field_C')['field_A'].describe()[['mean', 'count', '25%', '50%', '75%']]
print(d)

Je n'ai pas pu appeler la médiane dans ce cas, mais j'ai pu travailler sur d'autres fonctions.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X