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聚合max和min:
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
- 美丽的解决方案。做得好。