百分位數,如果將一組資料從小到大排序,並計算相應的累計百分位,則某一百分位所對應資料的值就稱為這一百分位的百分位數。可表示為:一組n個觀測值按數值大小排列。如,處於p%位置的值稱第p百分位數。
因為百分位數是採用等分的方式劃分資料,因此也可用此方法進行等頻分箱。
import pandas as pd
import numpy as np
import random
t=pd.dataframe(columns=['l','s'])
#隨機生成1000個0到999整數
t['l']=[random.randint(0,999) for _range in range(1000)]
#定義s為1,便於統計
t['s']=1
#通過np.percentile找到分位點
l_bin=
for i in range(0,101,10):
#分位點最後乙個數加上乙個極小的數,否則切分後數字999會標記為nan
l_bin[-1]+=1/1e10
print('分位點:',np.array(l_bin).round(2))
#對隨機數進行切分,right=false時左閉右開
t['box']=pd.cut(t['l'],l_bin,right=false)
tj=t.groupby('box')['s'].agg('sum')
print('分箱統計')
print(tj)
#生成新的標籤
label=
for i in range(len(l_bin)-1):
#原標籤和自定義的新標籤生成字典
list_box_td=list(set(t['box']))
list_box_td.sort()
dict_t=dict(zip(list_box_td,label))
#根據字典進行替換
t['new_box']=t['box'].replace(dict_t)
print('新分箱統計')
tj=t.groupby('new_box')['s'].agg('sum')
print(tj)
del t['s']
print(t.head())
輸出結果:
分位點: [ 0. 90.9 194.6 290. 386. 473.5 589. 688. 783.2 884.2
997. ]
分箱統計
box[0.0, 90.9) 100
[90.9, 194.6) 100
[194.6, 290.0) 99
[290.0, 386.0) 99
[386.0, 473.5) 102
[473.5, 589.0) 99
[589.0, 688.0) 100
[688.0, 783.2) 101
[783.2, 884.2) 100
[884.2, 997.0) 100
name: s, dtype: int64
新分箱統計
new_box
0.0+ 100
194.6+ 99
290.0+ 99
386.0+ 102
473.5+ 99
589.0+ 100
688.0+ 101
783.2+ 100
884.2+ 100
90.9+ 100
name: s, dtype: int64
l box new_box
0 253 [194.6, 290.0) 194.6+
1 468 [386.0, 473.5) 386.0+
2 130 [90.9, 194.6) 90.9+
3 476 [473.5, 589.0) 473.5+
4 656 [589.0, 688.0) 589.0+
可以看出每個分箱內,約有100個數字。根據這個方法,可以自定義一些標籤。 spark 實現百分位數計算
spark實現百分位數計算 二.自定義 spark core 計算百分位數方法 當做工具使用 具體 實現 計算 分位數 的分段值 param data rdd param tile 分位數 return 分段值 def computepercentile data rdd double tile d...
python 計算動態時點的百分位數
說明 1.動態時點 每次計算的資料框為截止於當前行的資料,即累計行 多次計算 2.靜態時點 當前時間 計算的資料框為所有行 一次計算 test pd.dataframe np.random.randint 1,10,size 10 columns value 生成 1,10 的隨機整數 test p...
r計算百分位數 微專題 蛋白質結構的計算規律
1 有關蛋白質結構的計算規律 1 假設氨基酸的平均相對分子質量為a,由n個氨基酸分別形成1條鏈狀多肽或m條鏈狀多肽 肽鍵數 脫去水分子數 氨基酸數 肽鏈數 蛋白質相對分子質量的計算按照反應前後質量守恆定律計算 形成肽鏈數 形成肽鍵數 脫去水分子數 蛋白質相對分子質量 n 1n 1 na 18 n 1...