【问题标题】:Create rows for missing months in data grouped by year and month (multi index)在按年和月分组的数据中为缺失月份创建行(多索引)
【发布时间】:2019-11-11 18:59:14
【问题描述】:

我想根据风向限制获得平均每月总降水量。我按年和月对数据进行分组,但是为了风向限制,有些月份被排除在索引之外。但是,我需要将这些月份强制返回到索引中,以便能够重塑数据框(每年 12 个月)并绘制热图。例如,在 1995 年,多指数中缺少 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()

【问题讨论】:

  • 能否提供数据示例或样本,以便日后方便复制?
  • 感谢您的评论!我只是编辑了我的问题并添加了一个截图来说明我的问题。

标签: python datetime pandas-groupby


【解决方案1】:

所以实际上我找到了解决问题的方法。它涉及以下步骤: 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) 我使用 'date' 列作为我的数据集的新索引,使用:.set_index('date')

4) 我使用以下方法获取日期范围内的完整月份列表:pd.date_range(df.index.min(), df.index.max(), freq='MS') ##Note: I对列表的所有每个元素使用“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.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-18
    • 2017-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多