<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
使用 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 .between 方法返回一個包含 True 的布林向量,用來對應的 Series 元素位於邊界值 left 和 right 之間。
引數有下面三個:
根據以下間隔規則將學生的分數分為等級:
其中方括號 [ 和圓括號 ) 分別表示邊界值是包含的和不包含的。我們需要確定哪個分數在感興趣的區間之間,併為其分配相應的等級值。注意看下面的不同的參數列示是否包含邊界
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'
以下是每個分數區間的人數:
df.grade.value_counts()
C 488
B 310
A 202
Name: grade, dtype: int64
此方法需要為每個 bin 編寫處理的程式碼,因此它僅適用於 bin 很少的情況。
可以使用 cut將值分類為離散的間隔。此函數對於從連續變數到分類變數也很有用。
cut的引數如下:
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 標籤的標籤列表。
檢視每個區段的人數
df.grade.value_counts()
C 488
B 310
A 202
Name: grade, dtype: int64
結果與上面範例相同。
qcut可以根據排名或基於樣本分位數將變數離散為大小相等的桶[3]。
在前面的範例中,我們為每個級別定義了分數間隔,這回使每個級別的學生數量不均勻。在下面的範例中,我們將嘗試將學生分類為 3 個具有相等(大約)數量的分數等級。範例中有 1000 名學生,因此每個分箱應該有大約 333 名學生。
qcut引數:
df['grade'], cut_bin = pd.qcut(df['score'], q = 3, labels = ['C', 'B', 'A'], retbins = True) df.head()
print (cut_bin) >> [ 0. 36. 68. 100.]
分數間隔如下:
使用 .value_counts() 檢查每個等級有多少學生。理想情況下,每個箱應該有大約 333 名學生。
df.grade.value_counts()
C 340
A 331
B 329
Name: grade, dtype: int64
雖然 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對數值進行分箱操作的4種方法總結的詳細內容,更多關於Pandas數值分箱的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45