首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从numpy数字化计算垃圾箱的百分位数?

从numpy数字化计算垃圾箱的百分位数?
EN

Stack Overflow用户
提问于 2016-09-03 22:42:50
回答 1查看 3.6K关注 0票数 2

我有一组数据和一组创建bin的阈值:

代码语言:javascript
运行
复制
data = np.array([0.01, 0.02, 1, 1, 1, 2, 2, 8, 8, 4.5, 6.6])
thresholds = np.array([0,5,10])
bins = np.digitize(data, thresholds, right=True)

对于bins中的每个元素,我想知道基本百分位数。例如,在bins中,最小的存储箱应该从第0个百分位数开始。然后是下一个仓位,例如,第20个百分位数。因此,如果data中的值落在data的第0和第20个百分位数之间,则它属于第一个bin

我已经调查过pandas rank(pct=True),但似乎无法正确完成。

有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2016-09-04 18:45:21

您可以按照前面的StackOverflow问题(Map each list value to its corresponding percentile)中的描述,计算数据数组中每个元素的百分比。

代码语言:javascript
运行
复制
import numpy as np
from scipy import stats
data = np.array([0.01, 0.02, 1, 1, 1, 2, 2, 8, 8, 4.5, 6.6])

方法1:使用scipy.stats.percentileofscore

代码语言:javascript
运行
复制
data_percentile = np.array([stats.percentileofscore(data, a) for a in data])
data_percentile
Out[1]:
array([  9.09090909,  18.18181818,  36.36363636,  36.36363636,
        36.36363636,  59.09090909,  59.09090909,  95.45454545,
        95.45454545,  72.72727273,  81.81818182])

方法2:使用scipy.stats.rankdata并归一化到100 (更快):

代码语言:javascript
运行
复制
ranked = stats.rankdata(data)
data_percentile = ranked/len(data)*100
data_percentile
Out[2]:
array([  9.09090909,  18.18181818,  36.36363636,  36.36363636,
        36.36363636,  59.09090909,  59.09090909,  95.45454545,
        95.45454545,  72.72727273,  81.81818182])

现在您已经有了百分位数的列表,可以像以前一样使用numpy.digitize对它们进行装箱:

代码语言:javascript
运行
复制
bins_percentile = [0,20,40,60,80,100]
data_binned_indices = np.digitize(data_percentile, bins_percentile, right=True)
data_binned_indices
Out[3]:
array([1, 1, 2, 2, 2, 3, 3, 5, 5, 4, 5], dtype=int64)

这为您提供了根据您选择的百分位数列表的索引进行二进制处理的数据。如果需要,您还可以使用numpy.take返回实际(上)百分位数:

代码语言:javascript
运行
复制
data_binned_percentiles = np.take(bins_percentile, data_binned_indices)
data_binned_percentiles
Out[4]:
array([ 20,  20,  40,  40,  40,  60,  60, 100, 100,  80, 100])
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39308146

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档