Python在观察值的#不能被容器的#整除的情况下表现出qcut行为
假设我有一系列的美元价值,并希望使用Python在观察值的#不能被容器的#整除的情况下表现出qcut行为,python,pandas,ranking-functions,Python,Pandas,Ranking Functions,假设我有一系列的美元价值,并希望使用qcut将其离散成9组。观测值的#不能被9整除。SQL Server的ntile函数有一种标准的方法来处理这种情况:它使9个组中的前n个组1观察值大于其余(9-n)组 我注意到在大熊猫身上,哪一组有x次观察和x+1次观察的分配似乎是随机的。我试着用algos来破译代码,以找出分位数函数是如何处理这个问题的,但没有弄明白 我有三个相关问题: 有谁能解释qcut的行为?哪些群体的观察次数较多是随机的吗 有没有办法强迫qcut的行为与NTILE类似(即,第一组获得x
qcut
将其离散成9组。观测值的#不能被9整除。SQL Server的ntile
函数有一种标准的方法来处理这种情况:它使9个组中的前n个组1观察值大于其余(9-n)组
我注意到在大熊猫身上,哪一组有x次观察和x+1次观察的分配似乎是随机的。我试着用algos来破译代码,以找出分位数函数是如何处理这个问题的,但没有弄明白
我有三个相关问题:
qcut
的行为?哪些群体的观察次数较多是随机的吗qcut
的行为与NTILE
类似(即,第一组获得x+1观察结果)NTILE
的函数有什么想法吗?(如果这是一项复杂的工作,只需对您的方法做一个概述就可以了。)NTILE
输出示例
Bin |# Observations
1 26
2 26
3 26
4 26
5 26
6 26
7 26
8 25
9 25
这里是熊猫:
Bin |# Observations
1 26
2 26
3 26
4 25 (Why is this 25 vs others?)
5 26
6 26
7 25 (Why is this 25 vs others?)
8 26
9 26
qcut
的行为类似于此,因为它更精确。以下是一个例子:
对于第i级,它从分位数(i-1)*10%开始:
输出为:
array([27, 26, 26, 26, 27, 26, 26, 26, 26, 27])
array([27, 27, 27, 26, 26, 26, 26, 26, 26, 26])
如果您想要分位数,您可以自己计算分位数:
n = len(a)
ngroup = 10
counts = np.ones(ngroup, int)*(n//ngroup)
counts[:n%ngroup] += 1
q = np.r_[0, np.cumsum(counts / float(n))]
q[-1] = 1.0
r2 = pd.qcut(a, q)
np.bincount(r2.labels)
输出为:
array([27, 26, 26, 26, 27, 26, 26, 26, 26, 27])
array([27, 27, 27, 26, 26, 26, 26, 26, 26, 26])
什么输入给出了这个结果?你能分享你的系列和熊猫代码吗?我想我能理解。第一级的qcut观测值是否总是较多(因为(i-1)对于第一级而言毫无意义)?此外,q[-1]=1的必要条件是确保范围以1结束,而不是任意接近1的分数?