使用 Python,我想根據之前的任務時間和持續時間計算一系列名為“到期時間”的任務的列。
任務 1 現在開始(在我的示例中為下午 5 點)。
任務 2 在任務 1 后 30 分鐘開始,因為任務 1 的持續時間為 30 分鐘。任務 3 在任務 2 后 60 分鐘開始,因為任務 2 的持續時間為 60 分鐘。如果沒有持續時間,我希望它默認為 30 分鐘的持續時間。
它不會讓我嵌入圖片,所以這里是一個圖表的嘗試:
當前df
- 任務---|持續時間(分鐘)|
- 任務1---| 30--------|
- 任務2---| 60--------|
- 任務3---| 45--------|
- 任務4---|-----------|
- 任務5---| 30--------|
所需的df
- 任務---|持續時間(分鐘)|--- |截止時間
- 任務1---| 30--------|--------| 下午 5 點(現在)
- 任務2---| 60--------|--------| 下午 5 點 30 分
- 任務3---| 45--------|--------| 下午6點30分
- 任務4---|-----------|--------| 晚上 7 點 15 分
- 任務5---| 30--------|--------| 晚上 7 點 45 分
非常感謝 Stackoverflow 社區!
uj5u.com熱心網友回復:
我想這就是你要找的。如果沒有,請告訴我!
import datetime
import pandas as pd
def addTime(tm, minutes):
fulldate = datetime.datetime(100, 1, 1, tm.hour, tm.minute)
fulldate = fulldate datetime.timedelta(minutes=minutes)
return fulldate.time()
LEN_DATA = 10
duration = [30]*LEN_DATA
startTime = datetime.datetime(100, 1, 1, 17, 0)
nextTime = datetime.datetime(100, 1, 1, 17, 0)
dueTime = [startTime.strftime('%H:%M')]*LEN_DATA
for i in range(1,LEN_DATA):
nextTime = addTime(nextTime, duration[i-1])
dueTime[i] = nextTime.strftime('%H:%M')
task = [f"Task {i}" for i in range(1,LEN_DATA 1)]
data = {"Task":task,
"Duration (min)" : duration,
"Due Time" : dueTime}
df = pd.DataFrame(data)
Task Duration (min) Due Time
Task 1 30 17:00
Task 2 30 17:30
Task 3 30 18:00
Task 4 30 18:30
Task 5 30 19:00
Task 6 30 19:30
Task 7 30 20:00
Task 8 30 20:30
Task 9 30 21:00
Task 10 30 21:30
uj5u.com熱心網友回復:
Shift并用填充NaN值,然后計算累積和并將列轉換為,現在將其與時間戳相加以獲得結果:Duration(min)30mintimedelta17:00:00
s = df['Duration(min)'].fillna(30).shift(fill_value=0)
df['Due time'] = pd.to_datetime('17:00:00') pd.to_timedelta(s.cumsum(), unit='m')
Task Duration(min) Due time
0 Task1 30.0 2022-05-23 17:00:00
1 Task2 60.0 2022-05-23 17:30:00
2 Task3 45.0 2022-05-23 18:30:00
3 Task4 NaN 2022-05-23 19:15:00
4 Task5 30.0 2022-05-23 19:45:00
uj5u.com熱心網友回復:
采用:
df['Duration(min)'][df['Duration(min)']=='']=30
temp = pd.to_timedelta(df['Duration(min)'].astype(int).shift(fill_value=0).cumsum(), 'm') pd.Timestamp.now()
df['due'] =temp.dt.strftime('%H:%M %p')
輸出:
Task Duration(min) due
0 Task1 30 08:13 AM
1 Task2 60 08:43 AM
2 Task3 45 09:43 AM
3 Task4 30 10:28 AM
4 Task5 30 10:58 AM
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/480128.html
上一篇:Python從偏移字串獲取時區
