使用pandas将单列数据转为多列时pivot报重复索引错误的求助
报错原因
该报错触发条件为同一个ID + Test的组合存在多条重复数据,pivot方法未内置重复值聚合逻辑,无法直接完成表结构重塑。
可行解决方案
方案1:带聚合逻辑转宽表
如果同一个ID的同一个检测项目存在多条有效结果,可根据业务需求指定聚合规则(取第一个值、取平均值、拼接所有值等),使用pivot_table实现转换:
import pandas as pd # 示例使用first取第一条结果,可按需替换为'mean'/'max'/lambda x: '/'.join(x)等规则 wide_df = pd.pivot_table( df, index="ID", columns="Test", values="Result", aggfunc="first", fill_value="NA" # 缺失检测结果直接填充为NA ).reset_index() # 如需将ID从索引转为普通列,保留该行即可
方案2:先去重再转宽表
如果重复数据为录入冗余,业务上同一ID的同一检测项目仅需保留一条结果,先去重再调用pivot即可:
# 按ID、Test组合去重,keep参数可指定保留first/last条数据 df_dedup = df.drop_duplicates(subset=["ID", "Test"], keep="first") wide_df = df_dedup.pivot(index="ID", columns="Test", values="Result").fillna("NA").reset_index()
内容的提问来源于stack exchange,提问作者Mario_B
相关产品推荐
相关产品推荐

