2
votes

Obtenir des centiles à partir d'un dataframe groupé

J'ai un dataframe qui comporte 2 groupes d'expérimentation et j'essaie d'obtenir des distributions en percentiles. Cependant, les données sont déjà regroupées:

             p25 p50 p75
control      1   1   4
treatment    2   5   12

Je veux calculer quel mois représente le 25e, 50e, 75e centile de chaque groupe, mais le dataframe est déjà regroupé sur des variables groupe / mois.

Mise à jour 1: Je me rends compte que je n'ai pas clarifié le problème que je rencontre. Il s'agit d'une trame de données groupée. Le contrôle, par exemple, comporte 8 points de données où mois = 1, 4 où mois = 4 et 2 où mois = 9. Les valeurs de centile suivantes doivent être:

x = pd.Series([1,1,1,1,1,1,1,1,4,4,4,4,9,9)]
x.quantile([0.25,0.5,0.75])
>> 0.25    1.0
   0.50    1.0
   0.75    4.0
   dtype: float64


0 commentaires

3 Réponses :


1
votes

Vous pouvez essayer d'utiliser pd.quanitle avec les pourcentages requis comme liste

                    ct  month
group           
control     0.25    3.0 2.5
            0.50    4.0 4.0
            0.75    6.0 6.5
treatment   0.25    5.0 3.5
            0.50    5.0 5.0
            0.75    6.0 8.5

Out:

df.groupby('group').quantile([0.25,0.50,0.75])


0 commentaires

1
votes

Vous pouvez utiliser Series.repeat puis obtenir les quantiles:

df.groupby('group').apply(lambda x: (x.month.repeat(x.ct)).quantile([0.25, 0.5, 0.75])).rename_axis([None], axis=1)

           0.25  0.50  0.75
group                      
control     1.0   1.0   4.0
treatment   2.0   5.0  12.0


0 commentaires

0
votes

Vous pouvez vérifier describe

df.groupby('group').describe().stack()


0 commentaires