pandas多分类变量场景下长表转宽表(unpivot)实现方法咨询
解决方案
1. 长格式存储实现(优先推荐的存储结构)
你需要的行维度存储长格式本身符合标准数据结构,无需复杂转换,直接提取对应字段即可,支持任意新增分类字段扩展:
# 标准长格式:每行对应一个分组+单个日期的count数值 long_df = df[['Store', 'Season', 'Fruit', 'needed', 'date', 'count']].copy() # 可选优化:统一字段类型减少存储占用 long_df['date'] = pd.to_datetime(long_df['date']) long_df[['Store', 'Season', 'Fruit']] = long_df[['Store', 'Season', 'Fruit']].astype('category')
2. 转目标宽格式实现
如果需要生成日期作为列的宽表输出,使用pivot方法即可,所有需要保留的分类字段都放入index参数,天然支持多分类字段兼容:
wide_df = df.pivot( # 所有需要保留的分类字段都加入此列表,新增分类直接加在这里即可 index=['Store', 'Season', 'Fruit', 'needed'], columns='date', values='count' ).reset_index() # 可选:将列名的日期转为字符串格式,对齐你给出的示例输出 wide_df.columns = [col.strftime('%Y-%m-%d') if isinstance(col, pd.Timestamp) else col for col in wide_df.columns] # 可选:空值填充为空字符串,和示例展示效果一致 wide_df = wide_df.fillna('')
原写法问题说明
你之前的写法只选择了Store作为分组维度,未包含Season、Fruit、needed等其他分类字段,所以会丢失字段信息,只要把所有需要保留的分类字段都加入分组维度即可实现兼容扩展。
内容的提问来源于stack exchange,提问作者bkeesey
相关产品推荐
相关产品推荐

