首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在给定阈值内合并范围(间隔)的有效方法

在给定阈值内合并范围(间隔)的有效方法
EN

Stack Overflow用户
提问于 2018-02-16 10:46:53
回答 1查看 175关注 0票数 1

我想知道是否有一种计算范围距离的有效方法,并将它们组合在给定的距离上。例如,给定d=10的范围和距离

代码语言:javascript
复制
1   2
4   7
12  15
32  36
38  41
...

第一次迭代是:(4-2) -> 2 -> 2< 10 -> OK -> (1,7)

代码语言:javascript
复制
1   7
12  15
32  36
38  41
...

(12-7) -> 5 -> 5< 10 -> OK -> (1,15)

代码语言:javascript
复制
1   15
32  36
38  41
...

(32-15) -> 17 -> 17 < 10 -> KO

代码语言:javascript
复制
1   15
32  36
38  41
...

(38-36) -> 2 -> 2< 10 -> OK -> (32,41)

所需的(结果)数据集:

代码语言:javascript
复制
1   15
32  41
...

这种算法的代价(列表、元组、循环)如果不能有效地实现,可能会给主程序带来风险。

提前谢谢你!!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-16 10:56:53

来源DF:

代码语言:javascript
复制
In [27]: df
Out[27]:
   start  end
0      1    2
1      4    7
2     12   15
3     32   36
4     38   41

In [28]: threshold = 10

矢量化溶液:

代码语言:javascript
复制
In [31]: (df.groupby(df['start'].sub(df['end'].shift()).ge(threshold).cumsum())
    ...:    .agg({'start':'first','end':'last'}))
    ...:
Out[31]:
   start  end
0      1   15
1     32   41

解释:

代码语言:javascript
复制
In [32]: df['start'].sub(df['end'].shift())
Out[32]:
0     NaN
1     2.0
2     5.0
3    17.0
4     2.0
dtype: float64

In [33]: df['start'].sub(df['end'].shift()).ge(threshold)
Out[33]:
0    False
1    False
2    False
3     True
4    False
dtype: bool

In [34]: df['start'].sub(df['end'].shift()).ge(threshold).cumsum()
Out[34]:
0    0
1    0
2    0
3    1
4    1
dtype: int32
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48825078

复制
相关文章

相似问题

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