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

如何在pandas中为转置数据创建新列 按Visit ID合并多行数据

解决方案

完整实现代码

import pandas as pd

# 读取原始数据
df = pd.read_excel(r'C:\Users\TEST.xlsx', sheet_name = 'Sheet1')

# 给同一个Visit ID下的每行生成顺序编号,用于区分多条诊断记录
df['dx_seq'] = df.groupby('Visit ID').cumcount() + 1

# 透视得到诊断编码的多列结构
dx_df = df.pivot(index='Visit ID', columns='dx_seq', values='DX Code').add_prefix('DX Code')
dx_df = dx_df.rename(columns={'DX Code1': 'DX Code'}).reset_index()

# 透视得到医保类型的两列结构
ins_df = df.pivot(index='Visit ID', columns='Primary or Secondary', values='Insurance').reset_index()

# 合并两部分结果得到最终输出表
result = pd.merge(dx_df, ins_df, on='Visit ID')
print(result)

实现逻辑说明

  1. 先用groupby('Visit ID').cumcount()给同一个就诊ID下的多条记录生成1、2的顺序编号,作为后续展开多列的依据
  2. 以Visit ID为索引、顺序编号为列名透视诊断编码字段,生成DX Code、DX Code2两列
  3. 再以Visit ID为索引、「Primary or Secondary」字段为列名透视医保信息字段,生成Primary、Secondary两列
  4. 按Visit ID合并两部分透视结果,即可得到你需要的输出结构

原有代码问题说明

  • 之前写的pivot方法用了不存在的DX ID作为取值字段,参数配置错误
  • melt函数的作用是把宽表转为长表,你需要的是长表转宽表,所以效果和预期完全相反

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 13:45:03