亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Pandas對數值進行分箱操作的方法有哪些

發布時間:2022-05-30 13:45:56 來源:億速云 閱讀:171 作者:iii 欄目:開發技術

這篇文章主要講解了“Pandas對數值進行分箱操作的方法有哪些”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Pandas對數值進行分箱操作的方法有哪些”吧!

前言

使用 Pandas 的between 、cut、qcut 和 value_count離散化數值變量。

分箱是一種常見的數據預處理技術有時也被稱為分桶或離散化,他可用于將連續數據的間隔分組到“箱”或“桶”中。在本文中,我們將討論使用 python Pandas 庫對數值進行分箱的 4 種方法。

我們創建以下合成數據用于演示

import pandas as pd # version 1.3.5 
import numpy as np 
def create_df(): 
 df = pd.DataFrame({'score': np.random.randint(0,101,1000)}) 
 return df 
 
create_df() 
df.head()

數據包括 1000 名學生的 0 到 100 分的考試分數。而這次的任務是將數字分數分為值“A”、“B”和“C”的等級,其中“A”是最好的等級,“C”是最差的等級。

Pandas對數值進行分箱操作的方法有哪些

1、between & loc

Pandas .between 方法返回一個包含 True 的布爾向量,用來對應的 Series 元素位于邊界值 left 和 right 之間。

參數有下面三個:

  • left:左邊界

  • right:右邊界

  • inclusive:要包括哪個邊界。可接受的值為 {“both”、“neither”、“left”、“right”}。

根據以下間隔規則將學生的分數分為等級:

  • A: (80, 100]

  • B: (50, 80]

  • C: [0, 50]

其中方括號 [ 和圓括號 ) 分別表示邊界值是包含的和不包含的。我們需要確定哪個分數在感興趣的區間之間,并為其分配相應的等級值。注意看下面的不同的參數表示是否包含邊界

df.loc[df['score'].between(0, 50, 'both'), 'grade'] = 'C' 
df.loc[df['score'].between(50, 80, 'right'), 'grade'] = 'B' 
df.loc[df['score'].between(80, 100, 'right'), 'grade'] = 'A'

Pandas對數值進行分箱操作的方法有哪些

以下是每個分數區間的人數:

df.grade.value_counts()

C    488
B    310
A    202
Name: grade, dtype: int64

此方法需要為每個 bin 編寫處理的代碼,因此它僅適用于 bin 很少的情況。

2、cut

可以使用 cut將值分類為離散的間隔。此函數對于從連續變量到分類變量也很有用。

cut的參數如下:

  • x:要分箱的數組。必須是一維的。

  • bins:標量序列:定義允許非均勻寬度的 bin 邊緣。

  • labels:指定返回的 bin 的標簽。必須與上面的 bins 參數長度相同。

  • include_lowest: (bool) 第一個區間是否應該是左包含的。

bins = [0, 50, 80, 100] 
labels = ['C', 'B', 'A'] 
df['grade'] = pd.cut(x = df['score'], 
                      bins = bins, 
                      labels = labels, 
                      include_lowest = True)

這樣就創建一個包含 bin 邊界值的 bins 列表和一個包含相應 bin 標簽的標簽列表。

Pandas對數值進行分箱操作的方法有哪些

查看每個區段的人數

df.grade.value_counts()

C    488
B    310
A    202
Name: grade, dtype: int64

結果與上面示例相同。

3、qcut

qcut可以根據排名或基于樣本分位數將變量離散為大小相等的桶[3]。

在前面的示例中,我們為每個級別定義了分數間隔,這回使每個級別的學生數量不均勻。在下面的示例中,我們將嘗試將學生分類為 3 個具有相等(大約)數量的分數等級。示例中有 1000 名學生,因此每個分箱應該有大約 333 名學生。

qcut參數:

  • x:要分箱的輸入數組。必須是一維的。

  • q:分位數。10 表示十分位數,4 表示四分位數等。也可以是交替排列的分位數,例如[0, .25, .5, .75, 1.] 四分位數。

  • labels:指定 bin 的標簽。必須與生成的 bin 長度相同。

  • retbins: (bool) 是否返回 (bins, labels)。

df['grade'], cut_bin = pd.qcut(df['score'], 
                          q = 3, 
                          labels = ['C', 'B', 'A'], 
                          retbins = True) 
df.head()

Pandas對數值進行分箱操作的方法有哪些

print (cut_bin) 
>> [  0.  36.  68. 100.]

分數間隔如下:

  • C:[0, 36]

  • B:(36, 68]

  • A:(68, 100]

使用 .value_counts() 檢查每個等級有多少學生。理想情況下,每個箱應該有大約 333 名學生。

df.grade.value_counts()

C    340
A    331
B    329
Name: grade, dtype: int64

4、value_counts

雖然 pandas .value_counts 通常用于計算系列中唯一值的數量,但它也可用于使用 bins 參數將值分組到半開箱中。

df['score'].value_counts(bins = 3, sort = False)

默認情況下, .value_counts 按值的降序對返回的系列進行排序。將 sort 設置為 False 以按其索引的升序對系列進行排序。

(-0.101, 33.333]    310
(33.333, 66.667]    340
(66.667, 100.0]     350
Name: score, dtype: int64

series 索引是指每個 bin 的區間范圍,其中方括號 [ 和圓括號 ) 分別表示邊界值是包含的和不包含的。返回series 的值表示每個 bin 中有多少條記錄。

與 .qcut 不同,每個 bin 中的記錄數不一定相同(大約)。.value_counts 不會將相同數量的記錄分配到相同的類別中,而是根據最高和最低分數將分數范圍分成 3 個相等的部分。分數的最小值為 0,最大值為 100,因此這 3 個部分中的每一個都大約在 33.33 范圍內。這也解釋了為什么 bin 的邊界是 33.33 的倍數。

我們還可以通過傳入邊界列表來定義 bin 邊界。

df['score'].value_counts(bins = [0,50,80,100], sort = False)

(-0.001, 50.0]    488
(50.0, 80.0]      310
(80.0, 100.0]     202
Name: score, dtype: int64

這給了我們與示例 1 和 2 相同的結果。

感謝各位的閱讀,以上就是“Pandas對數值進行分箱操作的方法有哪些”的內容了,經過本文的學習后,相信大家對Pandas對數值進行分箱操作的方法有哪些這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宝应县| 齐齐哈尔市| 潮安县| 遵义县| 平罗县| 益阳市| 漳平市| 长治市| 平利县| 永修县| 隆子县| 望奎县| 柞水县| 孟州市| 乌兰县| 大石桥市| 中方县| 高台县| 宁国市| 新密市| 金川县| 房山区| 朝阳区| 于田县| 民丰县| 天柱县| 巩义市| 孙吴县| 大宁县| 杂多县| 栖霞市| 凌源市| 那曲县| 铁力市| 布尔津县| 神农架林区| 彭泽县| 盐池县| 乾安县| 正宁县| 滨海县|