Pandas-合并具有短间隔的开始/结束时间范围

假设我有一系列给定事件的开始和结束时间:

np.random.seed(1)
df = pd.DataFrame(np.random.randint(1,5,30).cumsum().reshape(-1, 2), columns = ["start", "end"])

    start  end
0       2    6
1       7    8
2      12   14
3      18   20
4      24   25
5      26   28
6      29   33
7      35   36
8      39   41
9      44   45
10     48   50
11     53   54
12     58   59
13     62   63
14     65   68

我想合并间隔小于或等于 的时间范围n,因此n = 1结果将是:

fn(df, n = 1)

    start  end
0       2    8
2      12   14
3      18   20
4      24   33
7      35   36
8      39   41
9      44   45
10     48   50
11     53   54
12     58   59
13     62   63
14     65   68

我似乎无法找到一种方法来做到这一点,pandas而无需逐行迭代和构建结果。有没有更简单的方法来做到这一点?

回答

您可以减去移位值,比较N掩码,按累积总和创建组并传递给groupby聚合maxmin

N = 1
g = df['start'].sub(df['end'].shift())

df = df.groupby(g.gt(N).cumsum()).agg({'start':'min', 'end':'max'})
print (df)
    start  end
1       2    8
2      12   14
3      18   20
4      24   33
5      35   36
6      39   41
7      44   45
8      48   50
9      53   54
10     58   59
11     62   63
12     65   68

  • 美丽的解决方案。做得好。

以上是Pandas-合并具有短间隔的开始/结束时间范围的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>