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

如何为pivot table分组添加筛选并生成multi-level index的DataFrame?

实现方案

直接通过数据筛选、多级索引透视即可得到目标结果:

import pandas as pd

# 加载原始数据
df = pd.DataFrame({
    'Id': [1, 2, 2, 3],
    'Date': ['2/2/2022', '2/3/2023', '2/4/2023', '6/2/2023'],
    'A_Hours': [4, 3, 2, 3],
    'B_Hours': [4, 3, 6, 0]
})

# 1. 转换日期格式并筛选2023年数据,不符合的工时置0
df['Date'] = pd.to_datetime(df['Date'], format='%m/%d/%Y')
df.loc[df['Date'] < '2023-01-01', ['A_Hours', 'B_Hours']] = 0

# 2. 构建多级列索引的结果表
result = (df.set_index(['Id', 'Date'])
          [['A_Hours', 'B_Hours']]
          .unstack(level='Date')
          .swaplevel(axis=1)
          .sort_index(axis=1)
          .fillna(0)
          .astype(int)
          .reset_index())

print(result)

输出结果

Id      2023-02-03       2023-02-04       2023-06-02      
             A_Hours B_Hours A_Hours B_Hours A_Hours B_Hours
0   1          0       0       0       0       0       0
1   2          3       3       2       6       0       0
2   3          0       0       0       0       3       0

核心逻辑说明

  • 日期转为datetime类型,保证年份筛选的准确性
  • 通过set_index+unstack将日期从行维度转为列的上层索引,工时类型作为下层索引,实现多级列结构
  • fillna(0)自动补全无记录的Id-日期组合为0,保留所有原始Id
  • swaplevel调整列层级顺序,让日期作为第一级列索引,匹配需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 14:04:54