我有一個 Pandas 資料框,它有 start_time、end_time 和預訂持續時間。
請在下面找到示例資料框
| ID | 開始時間 | 時間結束 | 期間 |
|---|---|---|---|
| 1 | 2013-11-20 09:00:00 | 2013-11-20 09:30:00 | 0 天 0:30:00 |
| 2 | 2013-11-20 09:00:00 | 2013-11-20 12:10:00 | 0 天 3:10:00 |
| 3 | 2013-11-20 10:00:00 | 2013-11-20 11:00:00 | 0 天 1:00:00 |
| 4 | 2013-11-20 08:00:00 | 2013-11-20 09:40:00 | 0 天 1:40:00 |
我正在嘗試從上述資料框中獲取時間段
預期輸出:
| ID | 開始時間 | 時間結束 | 期間 | 時隙 |
|---|---|---|---|---|
| 1 | 2013-11-20 09:00:00 | 2013-11-20 09:30:00 | 0 天 0:30:00 | 9 - 10 |
| 2 | 2013-11-20 09:00:00 | 2013-11-20 12:10:00 | 0 天 3:10:00 | 9-10 |
| 2 | 2013-11-20 09:00:00 | 2013-11-20 12:10:00 | 0 天 3:10:00 | 10-11 |
| 2 | 2013-11-20 09:00:00 | 2013-11-20 12:10:00 | 0 天 3:10:00 | 11-12 |
| 3 | 2013-11-20 10:00:00 | 2013-11-20 11:00:00 | 0 天 1:00:00 | 10 - 11 |
| 4 | 2013-11-20 08:00:00 | 2013-11-20 09:40:00 | 0 天 1:40:00 | 8-9 |
| 4 | 2013-11-20 08:00:00 | 2013-11-20 09:40:00 | 0 天 1:40:00 | 9-10 |
到目前為止我所嘗試的
我可以從 start_time 和 end_time 獲取插槽,但我缺少預期的輸出
| ID | 開始時間 | 時間結束 | 期間 | 時隙 |
|---|---|---|---|---|
| 1 | 2013-11-20 09:00:00 | 2013-11-20 09:30:00 | 0 天 0:30:00 | 9-9:30 |
| 2 | 2013-11-20 09:00:00 | 2013-11-20 12:10:00 | 0 天 3:10:00 | 9-12:10 |
| 3 | 2013-11-20 10:00:00 | 2013-11-20 11:00:00 | 0 天 1:00:00 | 10-11 |
| 4 | 2013-11-20 08:00:00 | 2013-11-20 09:40:00 | 0 天 1:40:00 | 8 - 9:40 |
任何人都可以請給一些提示
uj5u.com熱心網友回復:
嘗試:
def get_slots(row):
dti = pd.date_range(row['Start_time'].floor('H'),
row['End_time'].ceil('H'), freq='H')
return [f"{s.hour:02}-{e.hour:02}" for s, e in zip(dti, dti[1:])]
out = df.assign(Timeslots=df.apply(get_slots, axis=1)).explode('Timeslots')
print(out)
# Output:
id Start_time End_time Duration Timeslots
0 1 2013-11-20 09:00:00 2013-11-20 09:30:00 0 days 00:30:00 09-10
1 2 2013-11-20 09:00:00 2013-11-20 12:10:00 0 days 03:10:00 09-10
1 2 2013-11-20 09:00:00 2013-11-20 12:10:00 0 days 03:10:00 10-11
1 2 2013-11-20 09:00:00 2013-11-20 12:10:00 0 days 03:10:00 11-12
1 2 2013-11-20 09:00:00 2013-11-20 12:10:00 0 days 03:10:00 12-13
2 3 2013-11-20 10:00:00 2013-11-20 11:00:00 0 days 01:00:00 10-11
3 4 2013-11-20 08:00:00 2013-11-20 09:40:00 0 days 01:40:00 08-09
3 4 2013-11-20 08:00:00 2013-11-20 09:40:00 0 days 01:40:00 09-10
設定可重現:
import pandas as pd
from pandas import Timestamp, Timedelta
data = {
'id': [1, 2, 3, 4],
'Start_time': [Timestamp('2013-11-20 09:00:00'), Timestamp('2013-11-20 09:00:00'),
Timestamp('2013-11-20 10:00:00'), Timestamp('2013-11-20 08:00:00')],
'End_time': [Timestamp('2013-11-20 09:30:00'), Timestamp('2013-11-20 12:10:00'),
Timestamp('2013-11-20 11:00:00'), Timestamp('2013-11-20 09:40:00')],
'Duration': [Timedelta('0 days 00:30:00'), Timedelta('0 days 03:10:00'),
Timedelta('0 days 01:00:00'), Timedelta('0 days 01:40:00')]
}
df = pd.DataFrame(data)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/392730.html
