如何在Pandas中将多列数据合并为单列且保留对应Type字段
解决方案
使用Pandas内置的melt方法即可快速实现该需求,不需要手动遍历列,20个列的场景也能高效处理:
完整代码示例
import pandas as pd import numpy as np # 构造示例原始数据,实际使用时替换为你读入的数据源即可 df = pd.DataFrame({ 'ID': [0, 1], 'Type': [True, False], 'AB1': ['AA', 'BB'], 'AB2': ['CC', np.nan], 'AB3': [np.nan, 'HH'], 'AB4': ['ZZ', 'JU'] }) # 核心处理逻辑 result = df.melt( id_vars=['Type'], # 固定保留的字段 value_vars=df.filter(like='AB').columns, # 自动匹配所有AB开头的列,无需手动列20个列名 value_name='AB', # 合并后新列的名称 var_name='temp_col' # 存储原列名的临时列,后续会删除 ).dropna(subset=['AB']).drop(columns='temp_col').reset_index(names='ID')
可选精简写法
如果你更习惯用栈操作,也可以用stack方法实现,代码更短,会自动过滤空值:
result = df.set_index(['Type']).filter(like='AB').stack().droplevel(-1).reset_index(name='AB').reset_index(names='ID')
补充说明
如果需要保留原始数据每行对应的原有ID,只需要把id_vars参数改为['ID', 'Type'],最后去掉重置ID的步骤即可,两种方法都支持任意数量的同前缀列,4列或者20列处理逻辑完全一致,不需要修改核心代码。
内容的提问来源于stack exchange,提问作者marceloasr
相关产品推荐
相关产品推荐

