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

如何将DataFrame从长格式转宽格式并保留重复ID的所有值?

解决方法

要实现这个长格式转宽格式的需求,核心是给每个ID下的Yes/No分组添加组内序号,再通过透视操作保留所有值,具体步骤如下:

1. 模拟原始数据(匹配你的表格结构)

先构造和你原始表一致的示例DataFrame:

import pandas as pd

df = pd.DataFrame({
    'ID': [1,1,1,1,2,2,2,2],
    'Checked': ['Yes','Yes','No','No','Yes','Yes','No','No'],
    'Value': ['A','B','C','D','E','F','G','H']
})

2. 添加组内序号

给每个ID+Checked的组合添加自增序号,用来区分同一分组下的不同值,避免透视时值被覆盖:

# 给每个ID+Checked组生成从1开始的序号
df['seq'] = df.groupby(['ID', 'Checked']).cumcount() + 1

3. 透视转换为宽格式

用pivot方法完成转换,最后整理列名让结果更符合预期:

# 执行透视,ID作为行索引,Checked+序号作为列,Value作为值
wide_df = df.pivot(index='ID', columns=['Checked', 'seq'], values='Value')
# 合并列名,比如把(Yes,1)格式转为Yes1
wide_df.columns = [f'{col[0]}{col[1]}' for col in wide_df.columns]
# 把ID从索引变回普通列
wide_df = wide_df.reset_index()

最终得到的结果和你期望的输出完全一致:

IDYes1Yes2No1No2
1ABCD
2EFGH

补充说明

如果你的原始数据中,部分ID下的Yes/No值数量不一致,可以用fillna补空值,比如wide_df = wide_df.fillna(''),保证格式统一。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 08:02:19