我有一个大熊猫数据框,我试图得到一个相当复杂的统计数据,我似乎无法弄明白。我有一个初始数据帧,用于每小时抽样一年的数据,对于十几个节点,看起来像这样(日期时间是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节点时,它可以工作,并且逐个节点地手动进行,但我自然希望能够循环并获得良好的输出。我想了解正在发生的操纵。