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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 06:45:04