У меня есть датафрейм, в котором хранятся данные о сне (как обычный сон, так и сон).Вот несколько столбцов данных:
- Время начала (ГГГГ-ММ-ДД ЧЧ: ММ: СС)
- Время окончания (тот же формат, что и выше)
- Продолжительность
Я пытаюсь найти способ суммировать количество часов сна в день.Было бы легко взглянуть на «Время начала» и подвести итог времени с той же даты, но это было бы сложно в сценарии, когда кто-то вздремнул в середине дня, но спал в 1:00 (потому что это было бырассматривается на следующий день).
В идеале я хотел бы считать сон до 4 утра следующего дня тем же днем, если это имеет смысл (например, дремать с 5:00 до 7:00 вечера 9/25, спать с 2: 00-7: 00 утра 9/26. Тогда общее количество сна на 9/25 составляет 7 часов).
Любые советы / предложения о том, как заставить это работать?
Вот моя идея (я еще не очень хорошо разбираюсь в Python, поэтому я просто собираюсь размещать псевдокод здесь и там):
# Create a datetime
next_day = datetime.time(4, 0, 0)
# Create an iterator
bedtimes = iter(df['Start time'])
for i in bedtimes:
# Get current and next sleep datetime
cur = df['Start time'][i]
next = df['Start time'][i+1]
# If the next datetime in the iterator is a day after AND before
# 4:00am, add the times of 'cur' and 'next' together
# What if there is a scenario where the user takes 2 one hour naps during
# the day? What is a good way to catch that scenario as well? Use a while
# loop?
if (cur.date() < next.date()) & (next.time() < next_day):
total = cur.time() + next.time()
# Advance to the next iteration
next(bedtimes, None)
# Somehow in here, I would want the loop to skip an iteration if we
# summed 'cur' and 'next' together (since they are considered sleep
# from the same day. I am interested in calculating the amount of
# sleep PER day)
Пожалуйста, исправьте мой синтаксис, если он неправильный!Выше это просто идея.Если есть лучшие способы, я хотел бы услышать, как это можно сделать.
Заранее спасибо!