Định nghĩa của percentile Tôi thường nhìn thấy hy vọng kết quả là giá trị từ danh sách được cung cấp dưới đây mà P phần trăm của giá trị được tìm thấy ... có nghĩa là kết quả phải từ tập hợp, không phải là nội suy giữa các phần tử đã đặt. Để có được điều đó, bạn có thể sử dụng một hàm đơn giản hơn.
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
Nếu bạn muốn nhận được giá trị từ danh sách được cung cấp bằng hoặc thấp hơn mà P phần trăm của giá trị được tìm thấy, sau đó sử dụng sửa đổi đơn giản này:
def percentile(N, P):
n = int(round(P * len(N) + 0.5))
if n > 1:
return N[n-2]
else:
return N[0]
Hoặc với đơn giản hóa được đề xuất bởi @ijustlovemath :
def percentile(N, P):
n = max(int(round(P * len(N) + 0.5)), 2)
return N[n-2]
Cảm ơn bạn! Vì vậy, đó là nơi nó được cất giấu. Tôi đã nhận thức được scipy nhưng tôi đoán tôi giả định những thứ đơn giản như phần trăm sẽ được xây dựng thành gumpy. – Uri
Hiện tại, hàm phần trăm tồn tại ở dạng gumpy: http://docs.scipy.org/doc/numpy/reference/generated/numpy.percentile.html – Anaphory
Bạn cũng có thể sử dụng hàm này làm hàm tổng hợp, ví dụ: để tính phần trăm thứ mười của mỗi nhóm của cột giá trị theo khóa, sử dụng 'df.groupby ('key') [['value']]. agg (lambda g: np.percentile (g, 10))' – patricksurry