我想根据风向限制获取平均每月总降水量。我按年和月对数据进行分组,但对风向限制的确有些排除在指数之外。但是,我需要迫使这几个月重新回到索引中,以便能够重塑数据框(每年12个月)并绘制热图。例如,在1995年,multi索引中缺少12月(第12个月)。 How to add it

walney_day = walney_wff.set_index(['year', 'month', 'day']).sum(level=[0,1,2]).reset_index()

#identifying dry days:
walney_day['dry'] = np.where((walney_day['precp']==0), 1, 0).copy()

#grouping by month to get a monthly count of the dry days:
walney_month = walney_day.groupby([walney_day['year'], walney_day['month']]).sum()

最佳答案

因此,实际上我找到了解决问题的方法。它涉及以下步骤:
1)而不是使用.groupby(year,month)并获得多索引,我使用.set_index(['year','month'])。sum(level = [0,1])。reset_index()我的组索引不包含日期时间变量。

2)我从“年”和“月”列中创建了一个“日期”列,用于对日期进行分组,方法是:pd.to_datetime(walney_month [['year','month']]。assign(day = 1))##注意:我需要分配一天(此处,每个月度值都与该月的第一天相关联)。

3)我使用以下``日期''列作为我的数据集的新索引:.set_index('date')

4)我使用以下方法获得日期范围内月份的完整列表:pd.date_range(df.index.min(),df.index.max(),freq ='MS')##注意:我使用了'MS '将列表中的每个元素都设为该范围内每个月的第一天。

5)我使用从4)获得的日期列表重新索引我的数据框,使用:.reindex()

这是我的代码:


walney_day = walney_wff.set_index(['year', 'month', 'day']).sum(level [0,1,2]).reset_index()

walney_day['dry'] = np.where((walney_day['precp']==0), 1, 0).copy()

walney_month = walney_day.set_index(['year', 'month']).sum(level=[0,1]).reset_index()

walney_month['date'] = pd.to_datetime(walney_month[['year', 'month']].assign(day=1))

walney_month = walney_month.set_index('date')

all_months = pd.date_range(walney_month.index.min(), walney_month.index.max(), freq='MS')

walney_month = walney_month.reindex(all_months)


output is here

关于python - 在按年份和月份分组的数据中创建缺少月份的行(多索引),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58807158/

10-14 19:11
查看更多