You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Datetime多级索引的月份查找Pandas单元格及分组数据访问

在Pandas中基于Datetime多级索引的月份查找单元格

针对你现在生成的这个多级索引DataFrame(dt为月度时间索引,rate为另一级索引),这里有几种实用的方法帮你按月份快速定位对应的consumption值:

方法1:用xs()(Cross Section)快速提取截面数据

xs()是Pandas处理多级索引的神器,能直接提取某一级或多级的截面数据,非常适配你的场景:

  • 精确匹配某年月:因为你的dt索引是每月最后一天,直接传入对应日期即可:

    # 获取2017年11月、rate为flat的consumption值
    target_value = groups.xs(('2017-11-30', 'flat'), level=['dt', 'rate'])
    # 如果要提取该月所有rate的数据,只指定dt级别就行
    november_2017_all = groups.xs('2017-11-30', level='dt')
    
  • 筛选所有同月份的数据(忽略年份):结合dt.month属性来过滤:

    # 提取所有11月的数据,不管是哪一年
    all_november_data = groups[groups.index.get_level_values('dt').dt.month == 11]
    

方法2:布尔索引灵活筛选

通过访问多级索引中dt级别的年份和月份属性,构建条件来精准筛选:

# 筛选2018年1月的所有数据
jan_2018_data = groups[(groups.index.get_level_values('dt').dt.year == 2018) & 
                       (groups.index.get_level_values('dt').dt.month == 1)]

# 直接获取该月份flat对应的consumption值
jan_2018_flat_value = jan_2018_data.loc[('2018-01-31', 'flat'), 'consumption']

方法3:重置索引后按普通列筛选(适合新手)

如果觉得多级索引操作有点绕,可以先把索引转为普通列,再按常规方式筛选:

# 重置索引,dt和rate从索引变成普通列
groups_reset = groups.reset_index()
# 筛选2017年12月、rate为flat的数据
dec_2017_flat = groups_reset[(groups_reset['dt'].dt.year == 2017) & 
                             (groups_reset['dt'].dt.month == 12) &
                             (groups_reset['rate'] == 'flat')]
# 取出对应的consumption值
dec_2017_value = dec_2017_flat['consumption'].iloc[0]

小提示

如果担心日期格式匹配问题(比如记不清每月最后一天的具体日期),可以先把dt转换为年月周期格式:

# 给DataFrame添加一个年月辅助列
groups['year_month'] = groups.index.get_level_values('dt').dt.to_period('M')
# 直接按年月字符串筛选
target_data = groups[groups['year_month'] == '2017-11']

内容的提问来源于stack exchange,提问作者Darkstarone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:28:11