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

如何将指定的Pandas DataFrame df转换为目标DataFrame df2?

解决方法:重塑Pandas DataFrame结构

嘿,这个需求属于典型的DataFrame结构重塑场景,我给你两种简洁靠谱的实现方式,都能完美得到你想要的df2:

方法一:melt + pivot组合(逻辑清晰易理解)

先把宽表转成“长格式”,再重新透视回目标结构,步骤一目了然:

import pandas as pd

# 你的原始DataFrame
df = pd.DataFrame(data=[['a1',2,3],['b1',4,5],['c1',6,7],['a1',8,9],['b1',10,11],['c1',12,13]],columns=['A','B','C'],index=[35,35,35,41,41,41])

# 步骤1:将B、C列转成长格式,新增临时列标记是B还是C
melted_df = df.reset_index().melt(id_vars=['index', 'A'], var_name='temp_tag', value_name='value')

# 步骤2:透视成目标结构,清理多余的索引层级
df2 = melted_df.pivot(index=['index', 'temp_tag'], columns='A', values='value')
df2 = df2.reset_index(level=1, drop=True)  # 移除临时标记的索引层
df2.columns.name = None  # 去掉列名的层级标签

方法二:groupby + 转置T(代码更紧凑)

利用分组处理每个索引组内的数据,一行核心代码搞定:

import pandas as pd

# 原始DataFrame
df = pd.DataFrame(data=[['a1',2,3],['b1',4,5],['c1',6,7],['a1',8,9],['b1',10,11],['c1',12,13]],columns=['A','B','C'],index=[35,35,35,41,41,41])

# 按索引分组,组内将A设为索引后转置B/C列成为行,最后清理索引
df2 = df.groupby(level=0).apply(lambda group: group.set_index('A')[['B', 'C']].T)
df2 = df2.reset_index(level=1, drop=True)
df2.columns.name = None

验证结果

两种方法运行后,得到的df2输出完全匹配你的目标结构:

a1  b1  c1
35   2   4   6
35   3   5   7
41   8  10  12
41   9  11  13

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:40:52