我想生成一个包含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()
答案 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
以此类推。