En supposant que les données sont toujours triées (merci @ juanpa.arrivillaga), vous pouvez utiliser la méthode rank
de la classe Pandas . rank()
prend plusieurs arguments. L'un d'eux est pct
:
pct: booléen, par défaut False
pourcentage Computes rang des données
Il existe différentes façons de calculer le rang de pourcentage. Ces méthodes sont contrôlées par l'argument method
:
méthode
: { 'moyenne', 'min', 'max', 'premier', 'dense'}
Vous devez la méthode "max"
:
max: rang le plus élevé dans le groupe
regard du LET à la sortie du rank()
méthode avec ces paramètres:
import numpy as np
import pandas as pd
series = [1,2,2,2,2,2,2,2,2,2,2,5,5,6,7,8]
S = pd.Series(series)
percentage_rank = S.rank(method="max", pct=True)
print(percentage_rank)
Cela vous donne essentiellement le percentile pour chaque entrée dans le Series
:
0 0.0625
1 0.6875
2 0.6875
3 0.6875
4 0.6875
5 0.6875
6 0.6875
7 0.6875
8 0.6875
9 0.6875
10 0.6875
11 0.8125
12 0.8125
13 0.8750
14 0.9375
15 1.0000
dtype: float64
Afin de récupérer l'index pour les trois centiles, vous regardez le premier élément dans le Series
qui a un rang de pourcentage égal ou supérieur au percentile qui vous intéresse. L'index de cet élément est l'index dont vous avez besoin.
index25 = S.index[percentage_rank >= 0.25][0]
index50 = S.index[percentage_rank >= 0.50][0]
index75 = S.index[percentage_rank >= 0.75][0]
print("25 percentile: index {}, value {}".format(index25, S[index25]))
print("50 percentile: index {}, value {}".format(index50, S[index50]))
print("75 percentile: index {}, value {}".format(index75, S[index75]))
Cela vous donne la sortie:
25 percentile: index 1, value 2
50 percentile: index 1, value 2
75 percentile: index 11, value 5
Les données sont-elles toujours triées? Ou bien, cette question n'aurait pas de sens, à moins que je ne manque quelque chose. Mais si * est * trié, vous pouvez calculer directement l'index. –
@ juanpa.arrivillaga Oui, les données sont toujours triées. – nautical