Python 计算多分组平均数与分组平均数的比率

Python 计算多分组平均数与分组平均数的比率,python,pandas,Python,Pandas,我希望生成一个数据框,其中包含尽可能多的项lenhr_avg,其中新数据框的值是一个月的小时平均值除以同一个月的月平均值 以下代码是生成将进入最终计算的两个数据集的示例代码。我可以通过hr_avg循环并逐项计算,但如果可以的话,我更喜欢数据帧操作来同时进行 import numpy as np import pandas as pd i = pd.date_range('2012-01-01 00:00', '2018-12-31 23:00', freq='H') x = np.random

我希望生成一个数据框,其中包含尽可能多的项lenhr_avg,其中新数据框的值是一个月的小时平均值除以同一个月的月平均值

以下代码是生成将进入最终计算的两个数据集的示例代码。我可以通过hr_avg循环并逐项计算,但如果可以的话,我更喜欢数据帧操作来同时进行

import numpy as np
import pandas as pd

i = pd.date_range('2012-01-01 00:00', '2018-12-31 23:00', freq='H')
x = np.random.randint(1, 100, len(i))

df = pd.DataFrame(data=x, index=i)

hr_avg = df.groupby([df.index.month, df.index.hour]).mean()
mo_avg = df.groupby([df.index.month]).mean()

我对您的列名进行了一些重构,将每月平均数与每小时平均数相加,并进行了计算:

import numpy as np
import pandas as pd

i = pd.date_range('2012-01-01 00:00', '2018-12-31 23:00', freq='H')
x = np.random.randint(1, 100, len(i))

df = pd.DataFrame(data=x, index=i)
hr_avg = df.groupby([df.index.month, df.index.hour]).mean().reset_index().rename(columns={'level_0': 'month', 'level_1': 'hour', 0: 'hour_avg'}).set_index('month')
mo_avg = df.groupby([df.index.month]).mean().reset_index().rename(columns={'index': 'month', 0: 'month_avg'}).set_index('month')
# Join the dataframes so each hour_avg entry has the corresponding mo_avg entry
res_df = hr_avg.join(mo_avg).reset_index().set_index(['month', 'hour'])
# Your calculation - hour_avg divided by monthly_avg
res_df['hour_divided_by_month'] = res_df['hour_avg'] / res_df['month_avg']
输出


依此类推。

如果将最后一行更改为res_df['hour_除以_除以_month']=res_df['hour_avg']/res_df['month_avg']
                hour_avg    month_avg   hour_divided_by_month
month   hour            
1          0    51.746544   50.378072   1.027164
1          1    53.921659   50.378072   1.070340
1          2    49.649770   50.378072   0.985543
1          3    52.087558   50.378072   1.033933
1          4    48.322581   50.378072   0.959199