Python 熊猫通过DatetimeIndex从另一个数据帧填充数据帧

Python 熊猫通过DatetimeIndex从另一个数据帧填充数据帧,python,pandas,Python,Pandas,我有一个带有DatetimeIndex的销售数字数据框,数据以分钟为单位扩展了几年,我想首先计算每年、每月、每天、每小时和地点的销售总额,然后计算每年和每月的平均值 然后根据那个日期,我想推断出一个新的月份,每天,每小时和地点。为此,我计算了一周中每一天每小时的销售额(预计周末的表现将不同于工作周),然后为我要推断的月份创建一个新的数据框架,然后对该月份的每一天计算(星期几、小时、POS),并将过去的数据用于相应的数据(星期几,小时,POS)作为我的“预测”,预测在给定月份的给定时间和日期,PO

我有一个带有DatetimeIndex的销售数字数据框,数据以分钟为单位扩展了几年,我想首先计算每年、每月、每天、每小时和地点的销售总额,然后计算每年和每月的平均值

然后根据那个日期,我想推断出一个新的月份,每天,每小时和地点。为此,我计算了一周中每一天每小时的销售额(预计周末的表现将不同于工作周),然后为我要推断的月份创建一个新的数据框架,然后对该月份的每一天计算(星期几、小时、POS),并将过去的数据用于相应的数据(星期几,小时,POS)作为我的“预测”,预测在给定月份的给定时间和日期,POS将出售什么

我这样做的原因是,一旦我计算了过去一周中每天的平均值,当我填充6月份的数据帧时,6月1日可能是一周中的任何一天,这一点很重要,因为工作日/周末表现不同。如果1日是周五,我想要周五的过去销售数字

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


在这种情况下,查看一些示例输入和所需输出将非常有帮助。请看,我可以尝试,但我必须匿名真实的公司数据:-/上述内容在某种程度上已经模糊了,同时保留了需要发生的内容的结构。只需一些虚拟数据就足够了。在这种情况下,不清楚您为什么要带走您将数据从数据帧中提取到dict中,然后使用dict将其放回新的数据帧中在那里,但如果没有更多,很难说clarity@G.Anderson-这很简单-我之所以将数据拉入dict,只是因为我不太清楚。这是问题的核心:一定有比将数据拉入dict更好的方法。@anky_91-可以。
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