У меня есть таблица сырой, как показано ниже:
Столбец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 |
С | 2022-03-16 14:19:28 | 2022-03-16 14:29:28 |
С | 2022-03-16 18:10:28 | 2022-03-16 18:18:28 |
С | 2022-03-16 18:28:28 | 2022-03-16 18:50:28 |
Вопрос
Я ищу помощь в создании нового фрейма данных, в котором есть новый столбец для каждый элемент индекса с именем Interval (в минутах), который равен StartTime следующей строки элемента индекса (если он существует) минус EndTime предыдущего элемента строки. Для первой строки каждого индекса интервал должен быть равен 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 |
С | 2022-03-16 14:19:28 | 2022-03-16 14:29:28 | 0 |
С | 2022-03-16 18:10:28 | 2022-03-16 18:18:28 | 10 |
С | 2022-03-16 18:28:28 | 2022-03-16 18:50:28 | 10 |
Любая помощь приветствуется.
Пытаться:
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