You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从长格式数据集创建宽长混合格式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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 16:54:15