【发布时间】:2015-07-02 22:07:28
【问题描述】:
我有 100.000 个观察值,变量 age 在 18-80 的范围内。我想根据age 变量找到X 箱。 bin 范围不能重叠,并且应该组合跨越整个间隔。例如,对于 X = 4,一种可能的 bin 组合可能是:
- 18-30
- 31-45
- 46-57
- 58-80
在给定值X 的情况下,如何找到所有可能的 bin 组合?
编辑:由@Wolf 提示,这是我正在考虑自己实施的另一个约束。每个 bin 必须为 age 变量保存至少 10 个值。这当然限制了X 所以X <= 6。
我尝试将其整合到@mkrieger1 的答案中,但失败了。
def bin_combinations(values, n):
"""
Generate all possible combinations of splitting the values into n
contiguous parts.
>>> list(bin_combinations('abcd', 3))
[['a', 'b', 'cd'], ['a', 'bc', 'd'], ['ab', 'c', 'd']]
"""
for indices in combinations(range(1, len(values)), n - 1):
li = list(indices)
starts = [None] + li
ends = li + [None]
size = li[-1] - li[0]
if size >= 10:
yield [values[start:end] for start, end in zip(starts, ends)]
【问题讨论】:
-
对这些垃圾箱有进一步的限制吗?例如,
18, 19, 20, 21-80是一个有效的组合吗? -
我已经更新了我的帖子。
-
您是否尝试过让我的解决方案适应您的受限问题?
-
是的,但我很难扔掉整套垃圾箱,而不仅仅是一个垃圾箱。请参阅下面的代码:
for indices in combinations(range(1, len(values)), n - 1): li = list(indices) starts = [None] + li ends = li + [None] size = li[-1] - li[0] if size >= 10: yield [values[start:end] for start, end in zip(starts, ends)] -
我尝试了几种不同的改动,但都没有成功。
标签: python combinations slice binning