[英]Pandas quantile function not returning the correct number of given quantiles
我有一個 dataframe 有超過 2,000 條記錄,其中有多個具有各種余額的列。 根據我想將其分配給存儲桶的余額。
嘗試將每個余額列拆分為一個分位數並具有以下存儲桶0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9
具體而言,將余額轉換為以下存儲桶:前 10%、前 20%、前30% 等等...
如果我理解正確,只要有超過 10 條記錄,它就應該根據線性插值將每條記錄存儲在百分位數中。
所以我運行以下命令:
score_quantiles = df.quantile(q=[0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9])
score_quantiles.to_dict()
# Arguments (x = value, p = field (i.e bal 1, bal2, bal3) , d = score_quantiles)
def dlpScore(x,p,d):
if pd.isnull(x) == True:
return 0
elif int(x) == 0:
return 0
elif x <= d[p][0.1]:
return 1
elif x <= d[p][0.2]:
return 2
elif x <= d[p][0.3]:
return 3
elif x <= d[p][0.4]:
return 4
elif x <= d[p][0.5]:
return 5
elif x <= d[p][0.6]:
return 6
elif x <= d[p][0.7]:
return 7
elif x <= d[p][0.8]:
return 8
elif x <= d[p][0.9]:
return 9
else:
return 10
df['SCORE_BAL1'] = df['bal1'].apply(dlpScore, args=('bal1',score_quantiles,))
問題是,在某些列上,它給了我所有的桶,而在其他列上,它只給了我一些:
有沒有辦法確保它創建所有的桶? 我可能在這里遺漏了一些東西。
如果您想確保在“桶”之間獲得相似的分布,您可能需要嘗試 pandas qcut
function。 完整的文檔在這里。
例如,要在您的代碼中使用它並獲得十分位數,您可以這樣做
n_buckets=10
df['quantile'] = pd.qcut(df['target_column'], q=n_buckets)
如果你想應用一個特定的 label 你可以做這樣的事情
n_buckets=10
df['quantile'] = pd.qcut(df['target_column'], q=n_buckets, labels=range(1,n_buckets+1))
PS:請注意,對於后一種情況,如果qcut
無法生成所需數量的分位數(例如,因為沒有足夠的值來創建分位數),您將獲得一個異常,因為傳遞的標簽多於分位數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.