【发布时间】:2016-05-13 01:20:05
【问题描述】:
我有一个数据框,我可以从中选择一列(系列),如下所示:
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 个 bin 有 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 个!
【问题讨论】: