У меня есть файл csv с четырьмя столбцами: дата, оптовый продавец, продукт и продажи. Я ищу поиск средних продаж за последние 52 недели для каждой комбинации продуктов и оптовых продавцов на каждую дату. Это означает, что средние предыдущие продажи продукта «A» у оптового торговца «B» в момент «C» за последние 52 недели.Как найти среднее значение за последние 52 недели продаж за каждый раз в python
Например, мы знаем, что продажи продукта «A» у оптового торговца «B» в январе, апреле, мае, августе, которые составляют 100, 200, 300, 400 соответственно. Предположим, что у нас нет записей до января. Таким образом, среднее значение предыдущей продажи продукта «А» у оптового торговца «В» в апреле равно 100/1, а в мае равно (200 + 100)/2 и в августе - (300 + 200 + 100)/3.
В следующей таблице приведены мои данные:
date wholesaler product sales
12/31/2012 53929 UPE54 4
12/31/2012 13131 UPE55 1
2/23/2013 13131 UPE55 1156
4/24/2013 13131 UPE55 1
12/1/2013 83389 UPE54 9
12/17/2013 83389 UPE54 1
12/18/2013 52237 UPE54 9
12/19/2013 53929 UME24 1
12/31/2013 82204 UPE55 9
12/31/2013 11209 UME24 4
12/31/2013 52237 UPE54 1
Сейчас я использую:
df = pd.read_csv('Sample.csv',index_col='date')
expd_gb = df.reset_index().groupby(['wholesaler', 'product'])['sales'].apply(pd.Series.expanding)
idx = df.reset_index().groupby(['wholesaler', 'product', 'date'])['sales'].count().index
cnct = pd.concat([expd_gb.iloc[n].mean().shift(1) for n in range(len(expd_gb))])
cnct.index = idx
Это дает общее среднее (не последние 52 недели) предыдущих продаж для каждого продукта-Оптовик комбинации. В результате получилось:
wholesaler product date
11209 UME24 12/31/2013 NaN
13131 UPE55 12/31/2012 NaN
2/23/2013 1.0
4/24/2013 578.5
52237 UPE54 12/18/2013 NaN
12/31/2013 9.0
53929 UME24 12/19/2013 NaN
UPE54 12/31/2012 NaN
82204 UPE55 12/31/2013 NaN
83389 UPE54 12/1/2013 NaN
12/17/2013 9.0
Со временем итерация записи о продажах увеличивается. Мне нужно выяснить, что среднее из продаж только за последние 52 недели. Это означает, что в определенную дату, например, 11/6/2015, какова средняя продажа продукта у определенного оптовика за последние 52 недели. Спасибо миллион за вашу помощь!
Большое спасибо! Это потрясающе!Считаете ли вы, что функция timedelta() 'может работать быстрее? На самом деле мне нужно вычислить более 25 миллионов строк, и я надеюсь найти быстрый способ найти результат. Еще раз спасибо за ваш элегантный код! – Ashkan
Ничего себе! Достаточно набор данных. Рассмотрим SQL-решение базы данных, используя условные агрегированные запросы для запуска avg и индексной таблицы на дату. Затем импортируйте в pandas df. – Parfait
Большое спасибо за ваш комментарий! Это хорошая идея. – Ashkan