У меня есть столбцы даты и времени, на основе которых я вычисляю min_time
и max_time
. поэтому из текущей min_time
строки нужно вычесть из предыдущей строки max_time
и сохранить в другой столбец. Как это сделать?
data = pd.DataFrame()
data['datetime'] = 18-6-22 8:22:22, 18-6-22 8:22:23, 18-6-22 8:22:24, 18-6-22 8:22:25, 18-6-22 8:22:26, 18-6-22 11:22:27
data['min_time'] = 18-6-22 8:22:22, 18-6-22 8:22:23, 18-6-22 8:22:24, 18-6-22 8:22:25, 18-6-22 8:22:26, 18-6-22 11:22:27
data['max_time'] = 18-6-22 8:22:22, 18-6-22 8:22:23, 18-6-22 8:22:24, 18-6-22 8:22:25, 18-6-22 8:22:26, 18-6-22 11:22:27
data['t_diff_time'] = 0, 0, 0, 0, 0, 0 Day 3:00:1
Есть ли какая-нибудь функция для этого?
ожидаемый результат:
Вы можете использовать комбинацию sub() и shift(). Конечно, первое значение будет нулевым, потому что для первого min
нет предыдущего max
. Попробуйте с:
df['diff'] = df['min_time'].sub(df['max_time'].shift(1))
Или, в равной степени в результате:
df['diff'] = df['min_time'] - df['max_time'].shift(1)
Возвращение:
datetime min_time max_time diff
0 18-6-22 8:22:22 2022-06-18 08:22:22 2022-06-18 08:22:22 NaT
1 18-6-22 8:22:23 2022-06-18 08:22:23 2022-06-18 08:22:23 0 days 00:00:01
2 18-6-22 8:22:24 2022-06-18 08:22:24 2022-06-18 08:22:24 0 days 00:00:01
3 18-6-22 8:22:25 2022-06-18 08:22:25 2022-06-18 08:22:25 0 days 00:00:01
4 18-6-22 8:22:26 2022-06-18 08:22:26 2022-06-18 08:22:26 0 days 00:00:01
5 18-6-22 11:22:27 2022-06-18 11:22:27 2022-06-18 11:22:27 0 days 03:00:01
При желании рассмотрите возможность добавления fillna()
, чтобы точно соответствовать желаемому результату:
data['diff'] = data['min_time'].sub(data['max_time'].shift(1)).fillna(pd.to_timedelta(0))
Выходы:
datetime min_time max_time diff
0 18-6-22 8:22:22 2022-06-18 08:22:22 2022-06-18 08:22:22 0 days 00:00:00
1 18-6-22 8:22:23 2022-06-18 08:22:23 2022-06-18 08:22:23 0 days 00:00:01
2 18-6-22 8:22:24 2022-06-18 08:22:24 2022-06-18 08:22:24 0 days 00:00:01
3 18-6-22 8:22:25 2022-06-18 08:22:25 2022-06-18 08:22:25 0 days 00:00:01
4 18-6-22 8:22:26 2022-06-18 08:22:26 2022-06-18 08:22:26 0 days 00:00:01
5 18-6-22 11:22:27 2022-06-18 11:22:27 2022-06-18 11:22:27 0 days 03:00:01
Это в первой строке кода, я отредактировал свой ответ, включив гиперссылку на документацию. По сути, df['col'].sub(df['col_2'])
равно df['col'] - df['col_2']
с дополнительной опцией параметра fillna.
Спасибо.. понял. Я думал, вы говорите о другой логике.
Пожалуйста, проверьте мое последнее редактирование. Я добавил дополнительный комментарий, чтобы точно соответствовать желаемому результату.
Вы можете использовать функцию shift(). Вы можете сделать что-то вроде этого:
shifted_max = data["max_time"].shift(1)
data["t_diff_time"] = data["min_time"] - shifted_max
можете ли вы сказать мне, как использовать sub() и shift() вместе?