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

如何使用Pandas与NumPy将多列DataFrame转换为长格式?

Pandas实现宽格式DataFrame转长格式

步骤1:模拟初始宽格式数据

根据你提供的表格结构,先构造对应的宽格式示例(实际使用时替换为你的真实数据即可):

import pandas as pd
import numpy as np

# 模拟宽格式输入数据
df_wide = pd.DataFrame({
    'Name': ['A', 'A-Jay', 'A.J.', 'Aaban'],
    '2017': [4.0, np.nan, np.nan, np.nan],
    '2018': [4.0, np.nan, np.nan, np.nan],
    '2019': [10.0, np.nan, 3.0, np.nan],
    '2020': [4.0, 6.0, np.nan, 4.0],
    '2021': [5.0, 5.0, np.nan, 4.0]
})

步骤2:使用melt转换为长格式

Pandas的melt方法是处理宽转长的标准工具,一行代码就能完成转换:

# 宽转长核心操作
df_long = df_wide.melt(
    id_vars='Name',          # 固定保留的标识符列
    var_name='Year',         # 原年份列名对应的新列名
    value_name='Nb',         # 原数值对应的新列名
    ignore_index=True        # 重置结果的索引
).dropna(subset=['Nb'])     # 过滤掉无数值的行

步骤3:优化数据类型(可选)

转换后Year列是字符串类型,可转为整数:

df_long['Year'] = df_long['Year'].astype(int)

最终结果

按名称和年份排序后,输出结果与你要求的长格式完全一致:

# 按名称升序、年份降序排序并重置索引
df_final = df_long.sort_values(by=['Name', 'Year'], ascending=[True, False]).reset_index(drop=True)
print(df_final)

输出示例:

Name  Year    Nb
0       A  2021   5.0
1       A  2020   4.0
2       A  2019  10.0
3       A  2018   4.0
4       A  2017   4.0
5   A-Jay  2021   5.0
6   A-Jay  2020   6.0
7    A.J.  2019   3.0
8   Aaban  2021   4.0
9   Aaban  2020   4.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 10:36:59