Pandas: вычесть строку столбца из другой следующей строки другого столбца

У меня есть столбцы даты и времени, на основе которых я вычисляю 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

Есть ли какая-нибудь функция для этого?

ожидаемый результат:

14 Задание: Типы данных и структуры данных Python для DevOps
14 Задание: Типы данных и структуры данных Python для DevOps
проверить тип данных используемой переменной, мы можем просто написать: your_variable=100
Python PyPDF2 - запись метаданных PDF
Python PyPDF2 - запись метаданных PDF
Python скрипт, который будет записывать метаданные в PDF файл, для этого мы будем использовать PDF ридер из библиотеки PyPDF2 . PyPDF2 - это...
Переменные, типы данных и операторы в Python
Переменные, типы данных и операторы в Python
В Python переменные используются как место для хранения значений. Пример переменной формы:
Почему Python - идеальный выбор для проекта AI и ML
Почему Python - идеальный выбор для проекта AI и ML
Блог, которым поделился Harikrishna Kundariya в нашем сообществе Developer Nation Community.
Как автоматически добавлять котировки в заголовки запросов с помощью PyCharm
Как автоматически добавлять котировки в заголовки запросов с помощью PyCharm
Как автоматически добавлять котировки в заголовки запросов с помощью PyCharm
Анализ продукта магазина на Tokopedia
Анализ продукта магазина на Tokopedia
Tokopedia - это место, где продавцы могут продавать свои товары. Товар должен быть размещен на витрине, чтобы покупателям было легче найти товар...
1
0
85
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете использовать комбинацию 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

можете ли вы сказать мне, как использовать sub() и shift() вместе?

Sushil Kokil 11.11.2022 10:22

Это в первой строке кода, я отредактировал свой ответ, включив гиперссылку на документацию. По сути, df['col'].sub(df['col_2']) равно df['col'] - df['col_2'] с дополнительной опцией параметра fillna.

Celius Stingher 11.11.2022 10:24

Спасибо.. понял. Я думал, вы говорите о другой логике.

Sushil Kokil 11.11.2022 10:27

Пожалуйста, проверьте мое последнее редактирование. Я добавил дополнительный комментарий, чтобы точно соответствовать желаемому результату.

Celius Stingher 11.11.2022 10:32

Вы можете использовать функцию shift(). Вы можете сделать что-то вроде этого:

shifted_max = data["max_time"].shift(1)
data["t_diff_time"] = data["min_time"] - shifted_max

Другие вопросы по теме