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

Pandas表格重塑:含重复项的熔解与透视报错解决

解决Pandas pivot重复项报错的方案

原代码报错是因为pivot时,同一Date+Items组合对应多个variable值(比如4/04/2023的Paint对应James和Joe),导致无法重塑。要自动识别重复项并生成额外列,可按以下步骤修改:

修改后的完整代码

import pandas as pd

data = [['4/04/2023','Floors','Tables','Roof','Paint','Paint'],
        ['4/05/2023','Roof','Floors','Tables','Roof','Paint'],
        ['4/06/2023','Paint','','Floors','Tables','Roof'],
        ['4/07/2023','Roof','Paint','','Floors','Tables']]
df = pd.DataFrame(data, columns=['Date', 'Jim','Bob','Ed','James','Joe'])

# 1. 宽表转长表,丢弃空值
df2 = df.melt(id_vars="Date", value_name='Items').dropna(subset=['Items']).reset_index(drop=True)

# 2. 为每个Date+Items的重复项添加递增计数器
df2['count'] = df2.groupby(['Date', 'Items']).cumcount() + 1  # 从1开始编号,方便列名识别

# 3. 拼接Items与计数器,生成唯一列名
df2['Items_with_count'] = df2['Items'] + '_' + df2['count'].astype(str)

# 4. 重新透视,此时无重复项冲突
df3 = df2.pivot(index="Date", columns='Items_with_count', values='variable')

# 5. 整理列顺序,按Items类型分组排序
sorted_cols = sorted(df3.columns, key=lambda x: (x.split('_')[0], int(x.split('_')[1])))
df3 = df3[sorted_cols]

print("原始表格:")
print(df)
print("\n转换后的目标表格:")
print(df3)

关键逻辑说明

  • 重复项标记:通过groupby+cumcount为每组重复的Date+Items生成唯一序号,确保透视时不存在索引重复问题。
  • 动态列生成:将Items与序号拼接成新列名(如Paint_1、Paint_2),让重复内容自动分到不同列中。
  • 列顺序优化:对生成的列按Items类型和序号排序,让输出结构更贴合目标表格的展示逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 15:32:11