語境
| 約會時間 | 活動名稱 | 狀態 | 開放時間 |
|---|---|---|---|
| 2022-03-15 00:00 | 有趣的活動 | 打開 | |
| 2022-03-15 01:00 | 有趣的活動 | 繼續 | |
| 2022-03-15 02:00 | 有趣的活動 | 繼續 | |
| 2022-03-15 03:00 | 有趣的活動 | 繼續 | |
| 2022-03-15 04:00 | 有趣的活動 | 關閉 | |
| 2022-03-15 08:00 | 有趣的活動 | 打開 | |
| 2022-03-15 09:00 | 有趣的活動 | 繼續 | |
| 2022-03-15 10:00 | 有趣的活動 | 關閉 |
問題
我需要計算從打開到關閉的時間。
我現在的代碼
我可以使用兩種方法。獲取每個“關閉”中的打開時間或每個“打開”和“繼續”中的累積 open_time。這是我對最后一個的看法。
我現在的代碼幾乎沒問題,它不計算關閉和打開之間的時間,但它忘記了最后一次時間差的總和。
df["Datetime"] = pd.to_datetime(df["Datetime"])
df["time_diff"] = df["Datetime"].diff()
df["time_diff"] = df["time_diff"].astype("timedelta64[m]").fillna(0)
condition = df["Status"] == "Close"
df.loc[condition, "time_diff"] = 0
df["Cumulative time"] = df.groupby(["Campaign_name"])["time_diff"].cumsum()
df = df.drop("time_diff", 1)
uj5u.com熱心網友回復:
IIUC,您可以在開放時創建新組并使用:
df['Datetime'] = pd.to_datetime(df['Datetime'])
group = df['Status'].eq('Open').cumsum()
df['Open_time'] = df.groupby(group)['Datetime'].apply(lambda g: g-g.iloc[0])
# or, alternative syntax
# df['Open_time'] = df.groupby(group)['Datetime'].apply(lambda g: g.diff().cumsum())
輸出:
Datetime Campaign_name Status Open_time
0 2022-03-15 00:00:00 Funny_campaign Open 0 days 00:00:00
1 2022-03-15 01:00:00 Funny_campaign Continue 0 days 01:00:00
2 2022-03-15 02:00:00 Funny_campaign Continue 0 days 02:00:00
3 2022-03-15 03:00:00 Funny_campaign Continue 0 days 03:00:00
4 2022-03-15 04:00:00 Funny_campaign Close 0 days 04:00:00
5 2022-03-15 08:00:00 Funny_campaign Open 0 days 00:00:00
6 2022-03-15 09:00:00 Funny_campaign Continue 0 days 01:00:00
7 2022-03-15 10:00:00 Funny_campaign Close 0 days 02:00:00
或僅分配給“關閉”:
df.loc[df['Status'].eq('Close'), 'Open_time'] = df.groupby(group)['Datetime'].apply(lambda g: g-g.iloc[0])
輸出:
Datetime Campaign_name Status Open_time
0 2022-03-15 00:00:00 Funny_campaign Open NaN
1 2022-03-15 01:00:00 Funny_campaign Continue NaN
2 2022-03-15 02:00:00 Funny_campaign Continue NaN
3 2022-03-15 03:00:00 Funny_campaign Continue NaN
4 2022-03-15 04:00:00 Funny_campaign Close 0 days 04:00:00
5 2022-03-15 08:00:00 Funny_campaign Open NaN
6 2022-03-15 09:00:00 Funny_campaign Continue NaN
7 2022-03-15 10:00:00 Funny_campaign Close 0 days 02:00:00
對于每個組的差異關閉:
df.groupby(group)['Datetime'].agg(lambda g: g.iloc[-1]-g.iloc[0])
輸出:
Status
1 0 days 04:00:00
2 0 days 02:00:00
Name: Datetime, dtype: timedelta64[ns]
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/448052.html
上一篇:如何將UTC日期時間字串轉換為Dart中的本地日期時間?
下一篇:更改時間戳變數格式或進行替換
