Два шага для решения вашей проблемы:
pd.date_range
с apply
и strftime
df['duration'] = df.apply(
lambda row: [
i.strftime('%H:%M')
for i in pd.date_range(
row['FROM'], row['TO'], freq='60s'
)
],
axis=1)
ID FROM TO duration
0 A 15:30 15:33 [15:30, 15:31, 15:32, 15:33]
1 B 16:40 16:44 [16:40, 16:41, 16:42, 16:43, 16:44]
2 C 15:20 15:22 [15:20, 15:21, 15:22]
apply
с stack
df.set_index(['ID', 'FROM', 'TO']) \
.duration.apply(pd.Series) \
.stack().reset_index(level=3, drop=True) \
.reset_index() \
.set_index('ID')
# Result
FROM TO 0
ID
A 15:30 15:33 15:30
A 15:30 15:33 15:31
A 15:30 15:33 15:32
A 15:30 15:33 15:33
B 16:40 16:44 16:40
B 16:40 16:44 16:41
B 16:40 16:44 16:42
B 16:40 16:44 16:43
B 16:40 16:44 16:44
C 15:20 15:22 15:20
C 15:20 15:22 15:21
C 15:20 15:22 15:22