如何在python中对数据帧执行滚动平均?

时间:2017-10-04 18:09:08

标签: python python-3.x pandas dataframe pandas-groupby

我有一个大熊猫数据框,我试图得到一个相当复杂的统计数据,我似乎无法弄明白。我有一个初始数据帧,用于每小时抽样一年的数据,对于十几个节点,看起来像这样(日期时间是dtype = datetime):

df =
          Price_Node_Name   Price_Type      Local_Datetime_HourEnding  Price 
1592204    FRANKLIN_FALL_HYD   GENERATOR     2016-08-18 01:00:00       16.91 
1592205    FRANKLIN_FALL_HYD   GENERATOR     2016-08-18 02:00:00       16.32 
1592206    FRANKLIN_FALL_HYD   GENERATOR     2016-08-18 03:00:00       15.11 
1592207    FRANKLIN_FALL_HYD   GENERATOR     2016-08-18 04:00:00       13.53  
1592208    FRANKLIN_FALL_HYD   GENERATOR     2016-08-18 05:00:00       13.22

然后我创建了一个包含节点名称和日期时间的多索引数据框,然后按节点名称分组:

df = df.set_index(['Price_Node_Name', 'Local_Datetime_HourEnding'])
df = df.groupby(level=0)
df =
                                                   Price_Type    Price
Price_Node_Name     Local_Datetime_HourEnding                  
FRANKLIN_FALL_HYD   2016-08-18 01:00:00             GENERATOR     16.91
                    2016-08-18 02:00:00             GENERATOR     17.05
                    2016-08-18 03:00:00             GENERATOR     18.09
                    2016-08-18 04:00:00             GENERATOR     12.75

我想要做的是,对于每个节点,按价格平均滚动4小时,然后按月平均滚动平均值,所以最后我会得到一个看起来像这样的输出对于每个节点:

1          2            3           4           5           6           7   ...
1 42.219417 30.506111   43.796000   33.946379   26.519583   24.253793   25.108167
2 43.239417 29.524074   40.186250   33.953017   30.221167   21.995431   23.777917
3 43.019167 30.988611   37.308879   34.901207   31.284333   20.896897   22.124083
4 40.920323 30.757679   35.237984   35.696500   31.725887   19.924583   20.755323
5 41.639839 30.606875   34.285000   36.307333   31.071935   18.862333   20.663790
6 38.041048 28.899911   32.746290   34.443333   24.454032   17.848750   19.732097
7 36.654516 24.987321   29.178065   31.912167   21.423145   16.796083   19.360081
8 37.500000 25.608750   29.166774   31.022083   20.673306   17.120167   19.837016
...

随着月份在顶部运行并且数小时向下运行,每个值都是月平均价格。

我无法循环遍历数据框并构建每个节点的滚动平均月平均值的主数据框。救命!我想我就是在这个问题上。

我的循环目前看起来像这样,我甚至不确定每个步骤的完成情况。

df_month_master = []
for node in df:
    for i in range(1, 13):
        df_month = df.loc[df['Local_Datetime_HourEnding'].dt.month == i]
        df_month['Price'] = df_month['Price'].rolling(4).mean()
        df_month = df.groupby([df_month['Local_Datetime_HourEnding'].dt.month,
                                                     df_month['Local_Datetime_HourEnding'].dt.hour]).mean()
        df_month_master.append(df_month)
df_month_master_df = pd.DataFrame(df_month_master)
print(df_month_master_df)

当我没有多索引或groupby节点时,它可以工作,并且逐个节点地手动进行,但我自然希望能够循环并获得良好的输出。我想了解正在发生的操纵。

0 个答案:

没有答案