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
3 Réponses :
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])
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
Vous pouvez vérifier describe
df.groupby('group').describe().stack()