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
df = create_df()
df.head()
score | |
0 | 63 |
1 | 21 |
2 | 76 |
3 | 0 |
4 | 0 |
Pandas .between 方法返回一个包含 True 的布尔向量,用来对应的 Series 元素位于边界值 left 和 right[1] 之间。
参数有下面三个:
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'
df
score | grade | |
0 | 63 | B |
1 | 21 | C |
2 | 76 | B |
3 | 0 | C |
4 | 0 | C |
... | ... | ... |
995 | 39 | C |
996 | 71 | B |
997 | 64 | B |
998 | 57 | B |
999 | 84 | A |
1000 rows 2 columns
df.grade.value_counts()
C 490
B 313
A 197
Name: grade, dtype: int64
可以使用 cut将值分类为离散的间隔。此函数对于从连续变量到分类变量[2] 也很有用。
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)
df.grade.value_counts()
C 498
B 312
A 190
Name: grade, dtype: int64
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()
score | grade | |
0 | 63 | B |
1 | 21 | C |
2 | 76 | A |
3 | 0 | C |
4 | 0 | C |
# 如果 retbins 设置为 True 则会返回 bin 边界。
print (cut_bin)
[ 0. 32. 67. 100.]
df.grade.value_counts()
B 339
C 334
A 327
Name: grade, dtype: int64
df['score'].value_counts(bins = 3, sort = False)
(-0.101, 33.333] 346
(33.333, 66.667] 320
(66.667, 100.0] 334
Name: score, dtype: int64
df['score'].value_counts(bins = [0,50,80,100], sort = False)
(-0.001, 50.0] 498
(50.0, 80.0] 312
(80.0, 100.0] 190
Name: score, dtype: int64
页面更新:2024-04-22
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号