如何从长格式数据集创建宽长混合格式DataFrame?
长格式DataFrame转宽格式的最优实现方案
直接用pandas的pivot_table或pivot方法就能满足需求,这两个是处理长转宽场景的最优选择,具体操作如下:
1. 原始数据生成代码
先确认原始长格式DataFrame的生成代码:
import pandas as pd import numpy as np long_dict = {'Period':['2021-01-01','2021-02-01','2021-01-03','2021-02-04','2022-02-01','2022-03-01','2021-03-01'], 'Indicator':['number of tracks','number of tracks','defects','defects','gears and bobs','gears and bobs','staff'], 'indicator_status':['active','active','active','active','active','active','active'], 'mech_code':['73','73','44','44','106','107','106'], 'Value':[100,120,7,17,25,99,81]} df = pd.DataFrame(long_dict)
2. 宽格式转换实现
方法一:pivot_table(推荐,兼容重复分组场景)
考虑到数据中可能存在同一分组组合对应多条记录的情况,pivot_table能自动处理聚合逻辑,这里我们取Value的第一个值(无重复值时,用first/mean结果一致):
wide_df = df.pivot_table( index=['Period', 'indicator_status', 'mech_code'], columns='Indicator', values='Value', aggfunc='first' ).reset_index() # 移除列名的层级标签 wide_df.columns.name = None
方法二:pivot(适合无重复分组键的场景)
如果能确保(Period, indicator_status, mech_code, Indicator)组合完全唯一,直接用pivot更高效:
wide_df = df.pivot( index=['Period', 'indicator_status', 'mech_code'], columns='Indicator', values='Value' ).reset_index() wide_df.columns.name = None
3. 转换后效果
转换后的DataFrame会把每个Indicator作为独立列,同时保留Period、indicator_status、mech_code作为行标识,缺失值自动填充为NaN,完全适配专有软件的可视化需求。
内容的提问来源于stack exchange,提问作者Mazil_tov998
相关产品推荐
相关产品推荐

