首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用python将数据划分为不同的间隔(间隔基于另一个列值)

使用python将数据划分为不同的间隔(间隔基于另一个列值)
EN

Stack Overflow用户
提问于 2017-06-25 00:09:49
回答 1查看 1.7K关注 0票数 0

例如,这是数据表:

代码语言:javascript
复制
1.1       300 
1.5       200
1.7       234
2.4       356
2.8       234
3.4       456

我想把第二列中的值放入相应的区间,比如前三到1.0-2.0区间,下两到2.0-3.0区间,最后一个到3.0-4.0区间。除此之外,在每个区间中,我喜欢返回大于对应区间中最低90%的值但小于最高10%值的值(假设在实际情况下每个区间中有许多数字)。

我想输出的是一个包含两列的新表:第一列是区间边界的中间值,第二列是最后一段中提到的值。示例数据表的输出为:

代码语言:javascript
复制
1.5    300
2.5    356 
3.5    456 

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-25 01:32:49

这是你想要的吗?

代码语言:javascript
复制
import numpy as _np
def bin_data(x, y, bins=[1.,2.,3.,4.]):
    """
    """
    import warnings
    import numpy as np

    xmin=np.min(x)
    xmax=np.max(x)

    bins_number=len(bins)-1
    xsm = np.mean([bins[:-1], bins[1:]], axis=0)
    ysm = np.zeros(bins_number)



    #-----------
    # The following process is what actually bins the data using numpy
    with warnings.catch_warnings():
        warnings.simplefilter("ignore", category=RuntimeWarning)
        for i in range(bins_number):
            if i == bins_number - 1:
                sel = bins[i] <= x
            else:
                sel = (bins[i] <= x) & (x < bins[i+1])
            ysm[i] = np.percentile(y[sel], 90, interpolation='nearest')
    #-----------

    return xsm, ysm

输出现在是正确的:

代码语言:javascript
复制
In [25]: bin_data(x, y)
Out[25]: (array([ 1.5,  2.5,  3.5]), array([ 300.,  356.,  456.]))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44738365

复制
相关文章

相似问题

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