如何为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,保留所有原始Idswaplevel调整列层级顺序,让日期作为第一级列索引,匹配需求
内容的提问来源于stack exchange,提问作者hailthedawn
相关产品推荐
相关产品推荐

