我有一個原始表,如下所示:
| A列(索引) | 星時 | 時間結束 |
|---|---|---|
| 一種 | 2022-03-16 13:07:28 | 2022-03-16 13:26:10 |
| 一種 | 2022-03-16 13:38:28 | 2022-03-16 13:40:28 |
| 乙 | 2022-03-16 14:01:28 | 2022-03-16 14:10:28 |
| C | 2022-03-16 14:19:28 | 2022-03-16 14:29:28 |
| C | 2022-03-16 18:10:28 | 2022-03-16 18:18:28 |
| C | 2022-03-16 18:28:28 | 2022-03-16 18:50:28 |
題
我正在尋求幫助以創建一個新的資料框,其中每個索引項都有一個名為 Interval(以分鐘為單位)的新列,它等于下一行索引項的 StartTime(如果存在)減去上一行 Item 的 EndTime . 對于每個索引的第一行,Interval 應為 0。
預期輸出表:
| A列(索引) | 星時 | 時間結束 | 間隔(分鐘) |
|---|---|---|---|
| 一種 | 2022-03-16 13:07:28 | 2022-03-16 13:26:10 | 0 |
| 一種 | 2022-03-16 13:38:28 | 2022-03-16 13:40:28 | 12 |
| 乙 | 2022-03-16 14:01:28 | 2022-03-16 14:10:28 | 0 |
| C | 2022-03-16 14:19:28 | 2022-03-16 14:29:28 | 0 |
| C | 2022-03-16 18:10:28 | 2022-03-16 18:18:28 | 10 |
| C | 2022-03-16 18:28:28 | 2022-03-16 18:50:28 | 10 |
任何幫助表示贊賞。
uj5u.com熱心網友回復:
嘗試:
- 如果需要,將日期列轉換為日期時間
- 按索引和開始時間排序
- 計算當前行“StarTime”與前一行“EndTime”的差異,并指定索引相同的位置。
df["StarTime"] = pd.to_datetime(df["StarTime"])
df["EndTime"] = pd.to_datetime(df["EndTime"])
df = df.sort_values(["ColumnA(Index)","StarTime"])
df["Interval(mins)"] = df["StarTime"].sub(df["EndTime"].shift()).dt.total_seconds().div(60).where(df["ColumnA(Index)"].eq(df["ColumnA(Index)"].shift())).fillna(0)
>>> df
ColumnA(Index) StarTime EndTime Interval(mins)
0 A 2022-03-16 13:07:28 2022-03-16 13:26:10 0.0
1 A 2022-03-16 13:38:28 2022-03-16 13:40:28 12.3
2 B 2022-03-16 14:01:28 2022-03-16 14:10:28 0.0
3 C 2022-03-16 14:19:28 2022-03-16 14:29:28 0.0
4 C 2022-03-16 18:10:28 2022-03-16 18:18:28 221.0
5 C 2022-03-16 18:28:28 2022-03-16 18:50:28 10.0
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/456781.html
上一篇:將多個二進制列轉換為交叉表
下一篇:洗掉熊貓資料框中的2個尾隨零
