Python实现DataFrame行列转换保留原列并新增透视列方案咨询
解决方法
你当前使用的pivot是长表转宽表的函数,和需求方向不符。你的原始数据属于列名嵌入了date(q122/q222)与指标(con/av)信息的宽表,且同一季度存在两组con/av重复列,需要先做宽转长处理,再按规则展开,具体可参考以下代码:
import pandas as pd # 读取数据时pandas会自动给重复列加.1/.2后缀,先统一列名格式方便拆分 df.columns = df.columns.str.replace(r'(.*)\.(\d)$', r'\2_\1', regex=True) # 宽转长提取date、分组序号、con/av值 df_long = pd.wide_to_long( df, stubnames=['con', 'av'], i=['stat1', 'stat2', 'id'], j='date', suffix=r'q\d{2}' ).reset_index() # 按date分组展开两组con/av为多列,保留所有原始维度 result = df_long.pivot( index=['stat1', 'stat2', 'id', 'date'], columns='level_4', values=['con', 'av'] ).reset_index() # 可选:平整列名,和你期望的输出格式对齐 result.columns = [col[0] if not col[1] else col[0] for col in result.columns]
运行后即可得到保留所有原始列、按季度拆分行的目标结果。
内容的提问来源于stack exchange,提问作者Lynn
相关产品推荐
相关产品推荐

