Использование панд и даты-времени в Jupyter, чтобы узнать, в какие часы никогда не совершались продажи (в любой день)

#python #pandas #jupyter-notebook

Вопрос:

Итак, у меня есть данные о продажах, которые я пытаюсь проанализировать. У меня есть данные о дате и времени [«Время даты заказа»], и я хотел бы увидеть наиболее распространенные часы продаж, но, что более важно, я хотел бы посмотреть, в какие минуты НЕТ продаж.

Я уже некоторое время кручу свои колеса и никак не могу найти решение. Мы будем очень признательны за любую помощь.

Я импортирую данные:

 df = pd.read_excel ('Audit Period.xlsx')
print (df)
 

Я очищаю данные:

 # Remove all columns except `applieddate` and null rows
time_df = df[df["Order Date Time"].notnull()]

# Ensure the index is still sequential
time_df = time_df[["Order Date Time"]].reset_index(drop=True)

# Select the first 10 rows
time_df.head(10)
 

Я конвертирую в дату и время и смотрю на итоги месяца:

 # Convert applieddate to datetime
time_df = time_df.copy()
time_df["Order Date Time"] = time_df["Order Date Time"].apply(pd.to_datetime)
time_df = time_df.set_index(time_df["Order Date Time"])

# Group by month
grouped = time_df.resample("M").count()
time_df = pd.DataFrame({"count": grouped.values.flatten()}, index=grouped.index)
time_df.head(10)
 

Я пытаюсь группироваться по часам, но это дает мне итоговые данные за день/час, а не итоговые данные за час, как при каждом заказе в полдень и т. Д:

 # Group by hour
grouped = time_df.resample("2H").count()
time_df = pd.DataFrame({"count": grouped.values.flatten()}, index=grouped.index)
time_df.head(10)
 

И вот тут-то я и застрял. Я пытаюсь интегрировать приведенные ниже предложения, но пока не могу в них разобраться. Любая помощь будет признательна.

Ответ №1:

Не уверен, что это самое блестящее решение, но я бы начал с создания кадра данных с требуемым уровнем детализации, будь то интервалы в 1 час, 5 минут и т. Д. Затем в вашем df со всеми фактическими данными вы можете выполнить группировку, как вы в настоящее время делаете это выше. Как только он будет сгруппирован, соедините их. Таким образом, у вас есть один фрейм данных, который включает пустые строки, связанные с промежутками времени, без записей. Самое сложное будет просто убедиться, что у вас есть дата и время, отформатированные таким образом, чтобы они соответствовали и правильно соединялись.

Комментарии:

1. Это звучит хорошо, и я немного пошел по этому пути, но в конечном итоге не смог понять, как получить список всех минут между двумя моментами (время открытия и время закрытия) между двумя датами, а не просто вернуть общее количество минут между этими двумя точками. Имеет ли это смысл?