Mak*_*ich 3 python dataframe pandas
我有一个带有一列连续变量的熊猫数据框。我需要将它们转换为 3 个 bin,这样第一个 bin 包含 <20% 的值,第二个包含 20 到 80% 之间的值,最后一个包含 >80% 的值。
我试图通过首先获取此类百分位数的 bin 边界,然后使用 pandas cut 函数来实现它。问题是我得到了一个奇怪的结果,只得到了中间的 bin 编码。请参阅以下内容:
test = [x for x in range(0,100)]
a = pd.DataFrame(test)
np.percentile(a, [20, 80])
Out[52]: array([ 19.8, 79.2])
pd.cut(a[0], np.percentile(a[0], [20, 80]))
...
15 NaN
16 NaN
17 NaN
18 NaN
19 NaN
20 (19.8, 79.2]
21 (19.8, 79.2]
22 (19.8, 79.2]
...
78 (19.8, 79.2]
79 (19.8, 79.2]
80 NaN
Run Code Online (Sandbox Code Playgroud)
为什么呢?我虽然 pandas cut 要求您提供您想要获得的垃圾箱的边界。提供 2 个边界我应该得到 3 个垃圾箱,但似乎不能这样工作。
如果您需要 3 个垃圾箱,那么您需要 4 个休息区。
test = [x for x in range(0,100)]
a = pd.DataFrame(test)
np.percentile(a, [0,20, 80,100])
Out[527]: array([ 0. , 19.8, 79.2, 99. ])
pd.cut(a[0], np.percentile(a[0], [0,20, 80,100]))
Run Code Online (Sandbox Code Playgroud)
此外,在熊猫中我们有qcut,这意味着您不需要从 numpy 中获取 bin
pd.qcut(a[0],[0,0.2,0.8,1])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2822 次 |
| 最近记录: |