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

Python中如何melt DataFrame中type列后的整数、字符串类型指定列?

你的思路是对的,直接用pandas的melt方法即可实现需求,不需要手动枚举type之后的列,自动定位列位置即可适配列数多、列名类型不统一的场景,具体代码如下:

核心实现代码

# 定位type列的索引位置
type_col_idx = df.columns.get_loc('type')
# 拆分出固定保留的id列和要转换的数值列
id_columns = df.columns[:type_col_idx + 1]
value_columns = df.columns[type_col_idx + 1:]

# 执行宽表转长表
result_df = df.melt(
    id_vars=id_columns,
    value_vars=value_columns,
    var_name='category',
    value_name='values'
)

# 如果需要保持和你示例一致的按no升序的输出顺序,可补充排序逻辑
result_df = result_df.sort_values(by='no', ignore_index=True)

完整测试代码(包含示例数据构造)

import pandas as pd

# 构造你的示例DataFrame
df = pd.DataFrame(
    data=[
        [1, 'bar', 'any', 2, 3, 1, 3],
        [2, 'foo', 'all', 3, 4, 0, 1]
    ],
    columns=['no', 'id', 'type', 'xa', 'xa', '01', '02']
)

type_col_idx = df.columns.get_loc('type')
id_columns = df.columns[:type_col_idx + 1]
value_columns = df.columns[type_col_idx + 1:]

result_df = df.melt(
    id_vars=id_columns,
    value_vars=value_columns,
    var_name='category',
    value_name='values'
).sort_values(by='no', ignore_index=True)

print(result_df)

注:你给出的预期输出示例存在手误,实际转换后category列会匹配原表type之后的列名:xa、xa、01、02,和原列名完全对应。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 05:24:02