- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个数据框,我可以从中选择一个列(系列),如下所示:
df:
value_rank
275488 90
275490 35
275491 60
275492 23
275493 23
275494 34
275495 75
275496 40
275497 69
275498 14
275499 83
... ...
value_rank 是先前从更大的数据集中创建的百分位数排名。我想做的是创建这个数据集的容器,例如五分位数
pd.qcut(df.value_rank, 5, labels=False)
275488 4
275490 1
275491 3
275492 1
275493 1
275494 1
275495 3
275496 2
... ...
这看起来不错,正如预期的那样,但事实并非如此。
事实上,我有 1569 列。可被 5 个 bin 整除的最接近的数字是 1565,这应该在每个 bin 中给出 1565/5 = 313 个观测值。有 4 条额外记录,所以我希望有 4 个箱子有 314 个观测值,一个箱子有 313 个观测值。相反,我得到这个:
obs = pd.qcut(df.value_rank, 5, labels=False)
obs.value_counts()
0 329
3 314
1 313
4 311
2 302
我在 df 中没有 nans,也想不出发生这种情况的任何原因。真的开始扯掉我的头发了!
这是一个小例子:
df:
value_rank
286742 11
286835 53
286865 40
286930 31
286936 45
286955 27
287031 30
287111 36
287269 30
287310 18
pd.qcut 给出了这个:
pd.qcut(df.value_rank, 5, labels = False).value_counts()
bin count
1 3
4 2
3 2
0 2
2 1
每个 bin 中应该有 2 个观察值,而不是 bin 1 中的 3 个和 bin 2 中的 1 个!
最佳答案
qcut 试图补偿重复值。如果您将 bin 限制与 qcut 结果一起返回,则可以更早地进行可视化:
In [42]: test_list = [ 11, 18, 27, 30, 30, 31, 36, 40, 45, 53 ]
In [43]: test_series = pd.Series(test_list, name='value_rank')
In [49]: pd.qcut(test_series, 5, retbins=True, labels=False)
Out[49]:
(array([0, 0, 1, 1, 1, 2, 3, 3, 4, 4]),
array([ 11. , 25.2, 30. , 33. , 41. , 53. ]))
您可以看到,除了将 bin 限制设置为 30 之外别无选择,因此 qcut 不得不从第三个 bin 的预期值中“窃取”一个并将它们放在第二个 bin 中。我认为这只是在更大范围内发生在你的百分位数上,因为你基本上是将他们的排名压缩到 1 到 100 的范围内。有什么理由不直接对数据运行 qcut 而不是百分位数或返回精度更高的百分位数?
关于python - pandas qcut 没有将相同数量的观察结果放入每个箱子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35183921/
x bins, each with capacity y x*y items each (item, bin) pair has an associated score 在给定上述标准的情况下,是否有
我正在尝试在我的程序中使用 rustc crate。 #[macro_use] extern crate rustc; extern crate rustc_typeck; extern crate
我正在使用 Piston 构建 Rust 游戏,我正在尝试使用 SublimeLinter Rust package .当我打开 .rs 游戏文件时,出现以下 linter 错误: extern cr
我是一名优秀的程序员,十分优秀!