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

Pandas如何将DataFrame宽表转换为指定格式的目标长表

解决方案

你当前写的melt逻辑已经完成了宽表转长表的第一步,之所以没有得到目标格式,是因为没有把type_sale字段的两个枚举值(open/closed)展开为独立列,在现有代码基础上追加pivot转换即可,完整代码如下:

import pandas as pd
import numpy as np
pd.set_option('max_columns', None)

data = {
        'type_sale': ['open','closed'],
        'group_1': [20,10],
        'group_2': [20,10],
        'group_3': [20,10],
        'group_4': [20,10],
        'group_5': [20,10],
        'group_6': [20,10],
        'group_7': [20,10],
        'group_8': [20,10],
        'group_9': [20,10],
        'group_10': [20,10],
        }


df = pd.DataFrame(data, columns = ['type_sale',
                                   'group_1',
                                   'group_2',
                                   'group_3',
                                   'group_4',
                                   'group_5',
                                   'group_6',
                                   'group_7',
                                   'group_8',
                                   'group_9',
                                   'group_10',
                                   ])

# 核心转换逻辑
df1 = df.melt(id_vars=["type_sale"], var_name="groups") \
        .pivot(index="groups", columns="type_sale", values="value") \
        .reset_index() \
        .rename_axis(columns=None)

# 如需调整open、closed列的顺序,可追加以下代码
# df1 = df1[["groups", "open", "closed"]]

代码说明

  • melt步骤和你原有逻辑一致,会生成包含type_sale、groups、value三列的长表,每个分组对应2行数据(分别对应当前open、closed的销售类型值)
  • pivot步骤将行维度的type_sale值旋转为列维度,以groups作为行索引,匹配对应的value值
  • reset_index()将作为索引的groups字段还原为普通数据列
  • rename_axis(columns=None)用于清除列索引的多余名称,避免出现无意义的表头层级

转换后输出的表结构前3行示例:

groupsclosedopen
group_11020
group_21020
group_31020

内容的提问来源于stack exchange,提问作者silent_hunter

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 20:42:21