python - 如何在python中使用pd.qcut对列值> 0的列进行十分位
问题描述
列包含以下数据(数据已按此列的降序排序)。此列中有 200 万条记录,大约有 100 万条记录为零。该列的分布如下
Column Distribution
min 0
mean 4.199
25% 0
50% 0
75% 0
max 1.400000
所以基本上在降序排序后只有前 25% 的数据。在删除零并仅在列值大于 > 0 的情况下对数据进行分箱后,我想为下面的数据创建相同大小的分箱
enter code here
Column
1400000
97000
79000
43000
28000
11000
... so on
0
0
0
0
0
0
0
我想仅将 column_values > 0 的数据放入十分位数。或者我想在一个 bin 中强制全为零。目前我面临的问题是前 2 个 bin 中的数据包含 150 万和 50000。剩下的 8 个 bin 是 0, 0, 0, .... 即当我查看按 bin 分组的列的总和时。
解决方案
IIUC,您可以屏蔽列并应用 qcut:
s = pd.Series([0,0,0,0,0] + [*range(10)])
pd.qcut(s.where(s>0), np.linspace(0,1,10))
输出:
0 NaN
1 NaN
2 NaN
3 NaN
4 NaN
5 NaN
6 (0.999, 1.889]
7 (1.889, 2.778]
8 (2.778, 3.667]
9 (3.667, 4.556]
10 (4.556, 5.444]
11 (5.444, 6.333]
12 (6.333, 7.222]
13 (7.222, 8.111]
14 (8.111, 9.0]
dtype: category
Categories (9, interval[float64]): [(0.999, 1.889] < (1.889, 2.778] < (2.778, 3.667] < (3.667, 4.556] ... (5.444, 6.333] < (6.333, 7.222] < (7.222, 8.111] < (8.111, 9.0]]
或者quantile
:
s.where(s>0).quantile(np.linspace(0,1,5))
输出:
0.00 1.0
0.25 3.0
0.50 5.0
0.75 7.0
1.00 9.0
dtype: float64
推荐阅读
- swift - 将 api-response(data) 分配给全局变量时出错
- kibana - Kibana 服务器不允许远程访问
- c# - '字符串'FromDate'未被识别为有效的日期时间。有一个从索引“0”开始的未知单词。在 CustomValidationAttribute 期间
- python - 会说话的座位 - 脚本帮助 (Raspberry Pi)
- node.js - Docker GLIBC 版本错误 - React 项目
- authentication - 我们可以在客户端打印出公钥吗?
- javascript - 使用 TypeScript 推断通用子 React 组件的 prop 类型
- python - Numpy 数组推导,哪里有问题
- c++ - 为什么在使用基于 boost 的库时我生成的预编译文件如此之大?
- html - R:如何使用 rvest 或任何 R 包从标签的属性中提取某些元素?