Pandas 文档对 qcut 函数有这样的说法:
根据等级或基于样本分位数将变量离散化为大小相等的桶。
所以我希望这段代码能给我 4 个箱子,每个箱子有 10 个值:
import numpy as np
import pandas as pd
np.random.seed(4242)
y = pd.Series(np.random.randint(low=1, high=10, size=40))
quartiles = pd.qcut(y, 4, labels=['1st', '2nd', '3rd', '4th'])
print('Quartiles:')
print(quartiles.value_counts(sort=False))
y.groupby(quartiles).agg(['count', 'mean']).plot(kind='bar');
Run Code Online (Sandbox Code Playgroud)
但是我得到了这个:
Quartiles:
1st 14
2nd 6
3rd 11
4th 9
dtype: int64
Run Code Online (Sandbox Code Playgroud)
我在这里做错了什么?
小智 0
查看垃圾箱的边界突出了评论中指出的问题。
boundaries = [1, 2, 3.5, 6, 9]
Run Code Online (Sandbox Code Playgroud)
这些界限是正确的。pandas 的代码首先创建分位数(在 qcut 内)的值。随后,样品被放入箱中。2s 的范围与第一个四分位数的边界重叠。
第三个值的原因是低于阈值的值是 3,高于阈值的值是 4。调用 pandas 的函数分位数,使得边界位于两个相邻值之间。
结论:当样本数量较多时,像分位数这样的概念变得越来越合适,因此可以使用更多值来固定边界。
| 归档时间: |
|
| 查看次数: |
1242 次 |
| 最近记录: |