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

Pandas合并DataFrame两列为单列新行并保留其余列值

Pandas多列合并为单列(保留匹配字段)实现方案

你之前的转换逻辑核心是「将不需要拆分的字段设为索引,再通过stack()实现宽表转长表」,新增date字段后转换失败,本质是设置索引时漏了date字段,导致date被当成需要拆分的学生姓名字段处理了。

沿用原有stack逻辑的修正代码

只需要将date和id同时设为索引,其余逻辑和你之前写的完全一致即可:

stu_df = stu_df.set_index(['date', 'id']).stack().reset_index(level=2, drop=True).to_frame('stu').reset_index()

运行后直接得到包含date、id、stu三列的结果,同一行的date、id会自动和拆分后的两个姓名一一匹配重复。

更适合初学者的替代方案(melt方法)

如果觉得stack的索引层级逻辑不好理解,可以用语义更直观的melt()宽转长方法,不需要操作索引:

stu_df = stu_df.melt(
    id_vars=['date', 'id'],  # 指定要保留、不做拆分的列,拆分时自动重复匹配
    value_vars=['stu1', 'stu2'],  # 指定要合并为单列的字段
    value_name='stu'  # 指定合并后存储姓名的列名
).drop('variable', axis=1)  # 删掉自动生成的原列名标记列

两种方法得到的结果完全一致,你可以根据自己的理解习惯选择。

效果验证

用测试数据跑通后的结果示例:
输入样例:

dateidstu1stu2
2024-01-0111张三王五
2024-01-0222李四赵六

转换后输出:

dateidstu
2024-01-0111张三
2024-01-0111王五
2024-01-0222李四
2024-01-0222赵六

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 08:54:22