首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建具有不同bin大小的bin值的字典- python

创建具有不同bin大小的bin值的字典- python
EN

Stack Overflow用户
提问于 2020-05-08 15:53:31
回答 1查看 519关注 0票数 0

我想创建一个具有不同bin大小和增量的bin值字典。例如,

代码语言:javascript
复制
Starting increment is 5, through 10 (e.g. 0-5, 6-10)
Then, increments of 10, through 100 (e.g. 11-20, 21-30...91-100)
Then increments of 25, through 200 (e.g. 101-125, 126-150...176-200)

在字典里,

代码语言:javascript
复制
bin_dict = {0-10 :[0-5, 6-10], 10-100:[11-20, 21-30, ...91-100], 100-200:[101-125, 126-150..]}

我尝试了以下代码:

代码语言:javascript
复制
def create_bin_ranges(bn_val):
    ## Create a list of bin ranges.
    dict_bin_ranges = {}
    list_bin_ranges = []

    for i in bn_val:
        step = i
        bin_range = np.arange(0, step+i, step)
        list_bin_ranges.append(bin_range)
        dict_bin_ranges[i] = list_bin_ranges
    return dict_bin_ranges

我得到的结果:(这不是我想要的)

代码语言:javascript
复制
values = create_bin_ranges([5,10,100])
print(values)
>> {5: [array([0, 5]), array([ 0, 10]), array([  0, 100])],
   10: [array([0, 5]), array([ 0, 10]), array([  0, 100])],
   100: [array([0, 5]), array([ 0, 10]), array([  0, 100])]}

我被卡住了,任何建议或帮助都是很棒的。

EN

回答 1

Stack Overflow用户

发布于 2020-05-08 18:06:47

我认为你首先需要清楚地定义bin背后的逻辑。一种解决方案是为range随以下条件变化的所有步骤定义一个列表:

  • start_bin
  • end_bin
  • step

对于该示例,这将导致:

代码语言:javascript
复制
steps = [(0, 10, 5), (10, 100, 10), (100, 200, 25)]

一旦我们知道要去哪里,就很容易构建所有的回收站:

在这里,我使用str.format为输出键定义了一个自定义函数。

代码语言:javascript
复制
def f(v1, v2):
    return "{}-{}".format(str(v1), str(v2))

然后构建列表:

代码语言:javascript
复制
# List + dict comprehension
out = {f(min_, max_): [[i+1, i+step] for i in range(min_, max_, step)] for min_, max_, step in steps}

# Or with nested for loops
out = {}
for min_, max_, step in steps:
    bin_ = []
    for i in range(min_, max_, step):
        bin_.append([i+1, i+step])
    out[f(min_, max_)] = bin_
print(out)

输出

代码语言:javascript
复制
# {
#     '0-10': [[1, 5], [6, 10]], 
#     '10-100': [[11, 20], [21, 30], [31, 40], [41, 50], [51, 60], [61, 70], [71, 80], [81, 90], [91, 100]],
#     '100-200': [[101, 125], [126, 150], [151, 175], [176, 200]]
# }

希望这能有所帮助!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61674552

复制
相关文章

相似问题

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