如何将给定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设为索引,确保转换过程中每个值都对应正确的idstack():把A/B/C列转为行结构,自动忽略空值,无需额外过滤reset_index(name='Learn'):重置索引并将数值列命名为Learndrop('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
相关产品推荐
相关产品推荐

