如何用Pandas的stack、melt、pivot等操作整理特定混乱DataFrame
解决方案
可以通过拆分元数据(type/model信息)与数值数据(年份对应值),再合并重塑的方式解决该问题,具体步骤如下:
- 提取元数据:从原DataFrame的前两行提取每个factor对应的type和model,转置后整理成结构化数据:
meta = df.iloc[:2].set_index('date').T.reset_index() meta.columns = ['factor', 'type', 'model']
- 提取并处理数值数据:提取第2行及之后的年份与对应数值,转置后将数值转为整数类型:
values = df.iloc[2:].set_index('date').T.reset_index() values.columns = ['factor'] + list(df.iloc[2:, 0]) # 转换数值类型 for year in df.iloc[2:, 0]: values[year] = values[year].astype(int)
- 合并数据并设置多级索引:将元数据与数值数据按factor字段合并,再设置model和type为多级索引,得到目标格式:
merged = pd.merge(meta, values, on='factor') result = merged.drop('factor', axis=1).set_index(['model', 'type']) # 移除索引名称(可选,匹配目标输出样式) result.index.names = [None, None]
执行后result的输出即为所需格式:
2020 2021 2022 2023 model_1 type_1 1 2 3 4 type_2 5 6 7 8 model_2 type_3 9 10 11 12
内容的提问来源于stack exchange,提问作者mahb
相关产品推荐
相关产品推荐

