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

Pandas按DATE列层级分组转ISO周数时如何保留其他MultiIndex层级

问题描述
  • 现有一个带MultiIndex列的DataFrame,列层级包含YEAR(整数类型)、CAT(字符串/分类类型)、DATE(日期类型)三层
  • 需求:将列的DATE层级按对应ISO周数分组求和,保留其余两个列层级,聚合后DATE层级重命名为WK
  • 初始实现代码:
df = df.groupby(
            lambda d: d.isocalendar().week,
            level='DATE', axis='columns'
     ).sum()
df.columns.rename('WK', inplace=True)
  • 运行问题:仅完成了DATE到周数的聚合,其余YEAR、CAT列层级全部丢失
解决方案

原代码问题出在分组时仅指定了DATE层级作为分组依据,pandas会默认丢弃未参与分组的其他列层级,需要把所有需要保留的列层级都纳入分组键。

假设你的列MultiIndex从上到下的层级顺序为YEAR → CAT → DATE,调整后代码如下:

df = df.groupby(
    [
        lambda col: col[0],  # 透传YEAR层级的原值
        lambda col: col[1],  # 透传CAT层级的原值
        lambda col: col[2].isocalendar().week  # 将DATE层级值转换为ISO周数
    ],
    axis=1
).sum()

# 重命名列层级,将聚合后对应原DATE位置的层级名改为WK
df.columns = df.columns.set_names(names=['YEAR', 'CAT', 'WK'])

适配提示:如果你的列层级顺序和上述假设不一致,只需要调整lambda里的索引序号即可。例如层级顺序为DATE → YEAR → CAT,则DATE对应的取值为col[0]、YEAR为col[1]、CAT为col[2],同步调整最后set_names里的层级名顺序即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 11:12:30