у меня есть набор данных местоположений магазинов с датами событий (дата все акции было продано от этого магазина) и количества проданных изделий, таких как:Создание временных рядов DataFrame из данных событий
import numpy as np, pandas as pd
# Dates
start = pd.Timestamp("2014-02-26")
end = pd.Timestamp("2014-09-24")
# Generate some data
N = 1000
quantA = np.random.randint(10, 500, N)
quantB = np.random.randint(50, 250, N)
sell = np.random.randint(start.value, end.value, N)
sell = pd.to_datetime(np.array(sell, dtype="datetime64[ns]"))
df = pd.DataFrame({"sell_date": sell, "quantityA":quantA, "quantityB":quantB})
df.index = df.sell_date
Я хотел бы создать новый dataframe серии времени, который имеет за еженедельное резюме (или в день; или на пользовательский объект DATE_RANGE) из диапазона этих величин а и В.
я могу генерировать номер недели и заполнитель продажи на основе таких, как ...
df['week'] = df.sell_date.dt.week
df.pivot_table(values = ['quantityA', 'quantityB'], index = 'week', aggfunc = [np.sum, len])
Но я не вижу, как сделать следующее:
- расширить это к полному временных рядов (на основе объекта DATE_RANGE, такие как
period_range = pd.date_range(start = start, end = end, freq='7D')
) - включают первоначальную дату (как переменная «неделя начала»), вместо целого числа недели, или
- изменить переменную date, чтобы быть индексом этого нового фрейма данных.
Отлично, спасибо. Чтобы быть полным, я добавил 'df.index = df.sell_date' к моему ответу, а затем ваш ответ работает полностью. –
Любые мысли о том, как это сделать с пользовательской date_range? Например, если мне нужны еженедельные резюме за весь 2014 год? –
Ну, вы можете установить период, заменив «W» тем, что вы хотите. Чтобы ограничить диапазон, вы можете делать разные вещи, но я думаю, что 'df.loc ['20140101': '20141231']. Resample ...' будет самым чистым в этом случае. Когда вы говорите весь 2014 год, вы имеете в виду подмножество такого же большого набора данных? В вашем примере данные ограничены до 2014. – JoeCondron