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

如何在Pandas DataFrame中无聚合结合melt、transpose和pivot函数?

问题:将DataFrame按位置列转行并保留完整数据

原始DataFrame:

使用位置英雄结果ID阵营
上单riven01蓝色方
打野jax01蓝色方
上单fiora11红色方
打野lee sin11红色方
上单mundo02蓝色方
打野jax02蓝色方
上单kayle12红色方
打野olaf12红色方

目标DataFrame:

上单打野结果ID阵营
rivenjax01蓝色方
fioralee sin11红色方
mundojax02蓝色方
kayleolaf12红色方

遇到的问题

执行命令 df.pivot(['Result', 'ID', 'Side'], 'Position Played', 'Champion').reset_index() 时触发错误:

ValueError: 索引包含重复条目,无法重塑

且需要保留完整数据,不能使用sum、mean这类聚合操作。


解决方案

方法1:修正列名后使用pivot

报错核心原因是列名不匹配——代码里用了英文列名,但实际DataFrame是中文列名。改用中文列名执行pivot即可:

result_df = df.pivot(index=['结果', 'ID', '阵营'], columns='使用位置', values='英雄').reset_index()
# 调整列顺序匹配目标格式
result_df = result_df[['上单', '打野', '结果', 'ID', '阵营']]

方法2:用pivot_table兼容潜在重复场景

如果后续数据中出现同一分组下同一位置的重复条目,可使用pivot_table搭配aggfunc='first'保留第一条数据,同时避免报错:

result_df = df.pivot_table(
    index=['结果', 'ID', '阵营'],
    columns='使用位置',
    values='英雄',
    aggfunc='first'
).reset_index()
result_df = result_df[['上单', '打野', '结果', 'ID', '阵营']]

方法3:groupby + unstack组合

通过分组后展开列的方式实现,逻辑更直观:

result_df = df.groupby(['结果', 'ID', '阵营', '使用位置'])['英雄'].first()\
              .unstack('使用位置')\
              .reset_index()
result_df = result_df[['上单', '打野', '结果', 'ID', '阵营']]

以上三种方法都能完整保留原始数据,最终输出与目标DataFrame一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 10:45:28