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

如何使用pandas的melt函数保留首列值实现宽表转长表

pandas 基于melt实现指定规则宽表转长表

问题原因说明

你之前调用.pivot()方法无法得到预期结果,是因为pivot的核心作用是长表转宽表,和你当前需要的宽表转长表是逆向操作,方向不匹配。

实现步骤

  1. 首先明确转换规则:保留ID列作为行关联标识,将原表中Alphabet、Unspecified: 1、Unspecified: 2三列的所有非空值,统一归集到新的Alphabet列下,空值直接丢弃。
  2. 完整可运行代码如下:
import pandas as pd
import numpy as np

# 构造原始示例数据
df = pd.DataFrame({
    'ID': [1, 2, 3, 4, 5, 6],
    'Alphabet': ['A', 'B', 'C', 'D', 'E', 'F'],
    'Unspecified: 1': ['G', np.nan, 'H', 'I', 'J', 'K'],
    'Unspecified: 2': ['L', np.nan, np.nan, 'M', np.nan, 'O']
})

# 调用melt完成宽转长
df_long = df.melt(
    id_vars=['ID'],
    value_vars=['Alphabet', 'Unspecified: 1', 'Unspecified: 2'],
    value_name='Alphabet'
).dropna(subset=['Alphabet'])

# 清理多余列、重置索引得到最终结果
df_long = df_long.drop(columns=['variable']).reset_index(drop=True)

结果验证

执行print(df_long)即可得到匹配需求的输出:

ID Alphabet
0    1        A
1    2        B
2    3        C
3    4        D
4    5        E
5    6        F
6    1        G
7    3        H
8    4        I
9    5        J
10   6        K
11   1        L
12   4        M
13   6        O

注:你给出的目标示例中最后一行索引重复写为11属于笔误,上述输出的值映射关系完全符合要求:每个ID对应的所有取值都已按行展开,无遗漏、无多余空值。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 06:30:52