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

需手动指定标签时,如何将宽格式数据转换为长格式数据

问题描述

现有如下DataFrame:

data = {'POSTING_AMOUNT1': [10,20,30], 'POSTING_AMOUNT2': [100,200,300],
       'POSTING_AMOUNT3': [15,25,35], 'POSTING_AMOUNT4': [20,40,60]}

期望输出表格:

ColumnPosting_Amount
110
120
130
2100
2200
2300
315
325
335
420
440
460

尝试使用pandas的.melt()函数未成功,错误代码如下:

melted = pd.melt(df, id_vars=[1,2,3,4], value_vars=['POSTING_AMOUNT1', 'POSTING_AMOUNT2', 'POSTING_AMOUNT3',
       'POSTING_AMOUNT4'], var_name='Column', value_name='Posting_Amount')
解决方案

错误原因:id_vars参数使用错误,你的DataFrame中不存在名为1、2、3、4的列,且未正确从原列名中提取数字作为Column列的值。

正确实现代码:

import pandas as pd

data = {'POSTING_AMOUNT1': [10,20,30], 'POSTING_AMOUNT2': [100,200,300],
       'POSTING_AMOUNT3': [15,25,35], 'POSTING_AMOUNT4': [20,40,60]}
df = pd.DataFrame(data)

# 执行melt,将所有列转为值列
melted = pd.melt(df, value_vars=df.columns, var_name='Column', value_name='Posting_Amount')
# 提取列名末尾的数字并转为整数
melted['Column'] = melted['Column'].str.extract(r'(\d+)').astype(int)
# 按Column排序以匹配期望输出顺序
melted = melted.sort_values('Column').reset_index(drop=True)

print(melted)

执行后即可得到与期望一致的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 18:52:37