计算多分组平均数与分组平均数之比

时间:2019-03-02 12:47:29

标签: python pandas

我想生成一个包含len(hr_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()

1 个答案:

答案 0 :(得分:1)

我对您的列名进行了一些重构,将小时均值加入了月均值并进行了计算:

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']

输出

                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

以此类推。

相关问题