熊猫通过DatetimeIndex

时间:2020-01-10 17:52:47

标签: python pandas

我有一个带有DatetimeIndex的销售数字数据框,用于在几分钟内扩展数年的数据,我想首先计算每年,每月,每天,每小时和位置的(销售总额),然后平均数年和月。

然后加上那个日期,我想推断出每天,每小时和位置的新月份。为此,我计算一周中每一天的每小时销售量(预计周末与工作日的行为会有所不同),然后为要推断的月份创建一个新的DataFrame,然后针对每个月份我计算该月中的某天(星期几,小时,销售点),并使用相应数据(星期几,小时,销售点)的过去数据作为我对在给定时间在POS出售的商品的“预测”,给定月份中的一天。

之所以这样做是因为一旦我计算出过去一周中每天的平均值,当我填充6月份的DataFrame时,6月1日可能是一周中的任何一天,这很重要,因为工作日/周末的行为有所不同。如果第一个是星期五,我希望过去的销售数字是星期五。

我有以下内容,很不幸,它太慢了-或可能是错误的,无论如何,没有错误消息,但是它没有完成(在真实数据上):

import numpy as np
import pandas as pd

# Setup some sales data for the past 2 years for some stores
hours = pd.date_range('2018-01-01', '2019-12-31', freq='h')
sales = pd.DataFrame(index = hours, columns=['Store', 'Count'])
sales['Store'] = np.random.randint(0,10, sales.shape[0])
sales['Count'] = np.random.randint(0,100, sales.shape[0])

# Calculate the average of sales over these 2 years for each hour in 
# each day of the week and each store
sales.groupby([sales.index.year, sales.index.month, sales.index.dayofweek, sales.index.hour, 'Store'])['Count'] \
        .sum() \
        .rename_axis(index=['Year', 'Month', 'DayOfWeek', 'Hour', 'Store']) \
        .reset_index() \
        .groupby(['DayOfWeek', 'Hour', 'Store'])['Count'] \
        .mean() \
        .rename_axis(index=['DayOfWeek', 'Hour', 'Store'])

# Setup a DataFrame to predict May sales per store/day/hour
may_hours = pd.date_range('2020-05-01', '2020-05-31', freq='h')
predicted = pd.DataFrame(index = pd.MultiIndex.from_product([may_hours, range(0,11)]), columns = ['Count']) \
            .rename_axis(index=['Datetime', 'Store'])

# "Predict" sales for each (day, hour, store) in May 2020
# by retrieving the average sales for the corresponding
# (day of week, hour store)
for idx in predicted.index:
    qidx = (idx[0].dayofweek, idx[0].hour, idx[1])
    predicted.loc[idx] = sales[qidx] if qidx in sales.index else 0

0 个答案:

没有答案