我有499条记录的ebola数据集。我试图根据概率(概率变量)找到每个五分位数的观测值数量。观察次数应分为0-20%,20-40%等类别。我认为要做的是,
test = pd.qcut(ebola.prob,5).value_counts()
这回来
[0.044, 0.094] 111
(0.122, 0.146] 104
(0.106, 0.122] 103
(0.146, 0.212] 92
(0.094, 0.106] 89
我的问题是我该如何排序以返回0-20%,20-40%40-60%60-80%80-100%的正确观察数?
我试过了
test.value_counts(sort=False)
这返回
104 1
89 1
92 1
103 1
111 1
这是104,89,92,103,111的订单吗?每个五分位数?
我很困惑,因为如果我看第一段代码的概率输出,看起来应该是111,89,103,104,92?
您所做的基本上是正确的,但是您可能会遇到两个问题:
pd.cut()
而不是pd.qcut()
。value_counts()
了太多次。(1)您可以在这里参考这个问题;使用时pd.qcut()
,每个存储区中应有相同数量的记录(假设您的总记录可以被存储区中的#均分),而没有。也许检查并确保您正在使用打算使用的那个。
这是一些随机数据来说明(2):
>>> np.random.seed(1234)
>>> arr = np.random.randn(100).reshape(100,1)
>>> df = pd.DataFrame(arr, columns=['prob'])
>>> pd.cut(df.prob, 5).value_counts()
(0.00917, 1.2] 47
(-1.182, 0.00917] 34
(1.2, 2.391] 9
(-2.373, -1.182] 8
(-3.569, -2.373] 2
添加排序标志将获得所需的内容
>>> pd.cut(df.prob, 5).value_counts(sort=False)
(-3.569, -2.373] 2
(-2.373, -1.182] 8
(-1.182, 0.00917] 34
(0.00917, 1.2] 47
(1.2, 2.391] 9
或搭配 pd.qcut()
>>> pd.qcut(df.prob, 5).value_counts(sort=False)
[-3.564, -0.64] 20
(-0.64, -0.0895] 20
(-0.0895, 0.297] 20
(0.297, 0.845] 20
(0.845, 2.391] 20
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句