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

如何在Pandas DataFrame中将多列ID转换为单列多行结构

解决方案

你需要的是典型的宽表转长表操作,不需要使用transform函数,Pandas内置的melt或者explode方法都可以快速实现需求:

方法1:使用melt函数(兼容性最好,所有Pandas版本支持)

首先构造示例数据:

import pandas as pd

df = pd.DataFrame({
    'uri': ['aaa', 'bbb'],
    'ID1': [1, 4],
    'ID2': [2, 5],
    'ID3': [3, 6]
})

执行转换操作:

res = df.melt(
    id_vars='uri', # 保留不变的索引列
    value_vars=['ID1', 'ID2', 'ID3'], # 需要展开的ID列
    value_name='IDs' # 展开后值对应的列名
).drop('variable', axis=1) # 删掉不需要的原ID列名列

# 如果需要按uri排序可以加上这行
res = res.sort_values('uri', ignore_index=True)

方法2:使用explode函数(更简洁,Pandas 1.1.0及以上版本支持)

# 先把多列ID合并为列表类型的列
df['IDs'] = df[['ID1', 'ID2', 'ID3']].values.tolist()
# 炸开列表列得到长表
res = df[['uri', 'IDs']].explode('IDs', ignore_index=True)

两种方法输出的结果都符合预期:

uriIDs
aaa1
aaa2
aaa3
bbb4
bbb5
bbb6

补充说明:transform函数的作用是对分组后的数据做同长度的转换返回,不会改变原表的行数,所以不适合这种行倍增的展开场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 10:36:04