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

如何将给定Pandas DataFrame转换为指定的长表结构?

转换DataFrame宽表为指定长表格式

原始数据与当前DataFrame

原始代码:

import pandas as pd

data={'id':[1, 2, 3],'A': ['edx',None , 'edx'],'B': [None,'com',None ],'C': ['tab','tab',None ] }  
df = pd.DataFrame(data)

当前DataFrame:

id  A     B     C
1   edx   None  tab
2   None  com   tab
3   edx   None  None

期望结果

id  Learn
1   edx
1   tab
2   com
2   tab
3   edx

解决方案

推荐两种简洁的实现方式:

方法1:使用stack()(自动过滤空值)

# 转换并整理格式
result = df.set_index('id').stack().reset_index(name='Learn').drop('level_1', axis=1)

步骤说明:

  • set_index('id'):将id设为索引,确保转换过程中每个值都对应正确的id
  • stack():把A/B/C列转为行结构,自动忽略空值,无需额外过滤
  • reset_index(name='Learn'):重置索引并将数值列命名为Learn
  • drop('level_1', axis=1):移除stack生成的原列名列(不需要保留)

方法2:使用melt()(需手动过滤空值)

# 融合列并过滤空值
result = df.melt(id_vars='id', value_name='Learn').dropna(subset=['Learn']).drop('variable', axis=1)

步骤说明:

  • melt(id_vars='id', value_name='Learn'):将A/B/C列合并为Learn列,保留id关联
  • dropna(subset=['Learn']):过滤Learn列中的空值
  • drop('variable', axis=1):移除原列名的辅助列

两种方法运行后都能得到你需要的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 11:10:49