我已经修改了你链接的帖子中的代码,以满足你的需求。
我认为开始列和结束列的类型为datetime是合适的,所以我转换了数据类型,然后应用了代码。
def find_interval(sr):
dti = pd.date_range(str(sr['start']).split(' ')[0], str(sr['end']).split(' ')[0])
dti = dti[(dti > sr['start']) & (dti < sr['end'])].tolist()
return list(zip([sr['start']] + dti, dti + [sr['end']]))
df['start'] = pd.to_datetime(df['start'])
df['end'] = pd.to_datetime(df['end'])
out = df.apply(find_interval, axis=1).explode().apply(pd.Series, index=['start', 'end'])
out = df.drop(columns=['start', 'end']).join(out)
出来
Compressor # start end
0 0 2023-04-13 14:35:00 2023-04-13 16:05:00
1 0 2023-04-13 23:40:00 2023-04-14 00:00:00
1 0 2023-04-14 00:00:00 2023-04-14 02:00:00
2 0 2023-04-14 07:50:00 2023-04-14 10:45:00
3 0 2023-04-19 07:32:39 2023-04-19 08:41:08