Die Definition des Begriffs Perzentil erwartet ich sehe, in der Regel als Ergebnis den Wert aus der bereitgestellten Liste, unter dem P Prozent der Werte gefunden werden ... was bedeutet, dass das Ergebnis aus der Menge stammen muss, nicht eine Interpolation zwischen Mengenelementen. Um das zu erreichen, können Sie eine einfachere Funktion verwenden.
def percentile(N, P):
"""
Find the percentile of a list of values
@parameter N - A list of values. N must be sorted.
@parameter P - A float value from 0.0 to 1.0
@return - The percentile of the values.
"""
n = int(round(P * len(N) + 0.5))
return N[n-1]
# A = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
# B = (15, 20, 35, 40, 50)
#
# print percentile(A, P=0.3)
# 4
# print percentile(A, P=0.8)
# 9
# print percentile(B, P=0.3)
# 20
# print percentile(B, P=0.8)
# 50
Wenn Sie lieber den Wert von der mitgelieferten Liste bekommen würden bei oder unter der P Prozent der Werte gefunden werden, dann diese einfache Modifikation verwenden:
def percentile(N, P):
n = int(round(P * len(N) + 0.5))
if n > 1:
return N[n-2]
else:
return N[0]
Oder mit der Vereinfachung von @ijustlovemath vorgeschlagen :
def percentile(N, P):
n = max(int(round(P * len(N) + 0.5)), 2)
return N[n-2]
Thank you! Da hat es sich versteckt. Ich war mir über Scipy im Klaren, aber ich vermutete, dass einfache Dinge wie Perzentile in eine Menge eingebaut würden. – Uri
Inzwischen existiert eine Perzentilfunktion in numpy: http://docs.scipy.org/doc/numpy/reference/generated/numpy.percentile.html – Anaphory
Sie können es auch als eine Aggregationsfunktion verwenden, z. Um das zehnte Perzentil jeder Gruppe einer Wertspalte nach Schlüssel zu berechnen, verwenden Sie 'df.groupby ('key') [['value']]. agg (lambda g: np.perzentil (g, 10))' – patricksurry