假设我有一个熊猫系列的美元价值,并想要离散成9组使用qcut。观察的#不能被9除。Server的ntile函数为这种情况提供了一种标准方法:它使9个组中的第一个n个观察值大于其余的(9-n)组。
我注意到,在熊猫中,对于x+1的观察,哪些组的任务似乎是随机的。我试着用algos破译代码,找出分位数函数是如何处理这个问题的,但没有弄清楚。
我有三个相关的问题:
qcut的行为吗?是随机的,哪一组得到的观察更多?qcut与NTILE类似(即第一组得到x+1观测)?NTILE那样的函数,有什么想法吗?(如果这是一项复杂的工作,那么简单地介绍一下您的方法就会有帮助。)下面是Server的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发布于 2013-12-22 08:24:28
qcut的行为是这样的,因为它更精确。下面是一个示例:
对于i_th级别,它以分位数(_I-1)*10%开始:
import pandas as pd
import numpy as np
a = np.random.rand(26*10+3)
r = pd.qcut(a, 10)
np.bincount(r.labels)产出如下:
array([27, 26, 26, 26, 27, 26, 26, 26, 26, 27])如果您想要NTILE,您可以自己计算分数:
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, 27, 27, 26, 26, 26, 26, 26, 26, 26])https://stackoverflow.com/questions/20726493
复制相似问题