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

Pandas如何对按6行分组重复Field列的DataFrame执行unstack操作

pandas实现固定周期行转列(unstack)方案

不需要逐行迭代追加,用pandas原生的向量化方法就能快速实现,性能远好于循环写法。

实现思路

你的数据规律是每6行为一个重复单元,同一单元内Field列固定按a→f取值,对应结果里的一行。只要先给每一行打上所属的组编号,再通过透视/反堆叠操作转成宽表即可。

完整代码示例

首先构造测试数据(多组重复结构方便验证效果):

import pandas as pd

# 构造3组重复的测试数据,和你给出的示例结构一致
example_df = pd.DataFrame({
    'Field': ['a','b','c','d','e','f']*3,
    'Value': ['A',1,3,2,3,1, 'B',2,4,1,5,0, 'C',9,8,7,6,5]
})

核心转换代码,两种写法效果完全一致:

# 步骤1:按每6行一组,给每行分配组ID,从0开始递增
example_df['group_id'] = example_df.index // 6

# 写法1:用pivot直接透视,最直观
result = example_df.pivot(
    index='group_id',
    columns='Field',
    values='Value'
).reset_index(drop=True) # 去掉组ID索引,得到从0开始的默认行号

# 写法2:用set_index+unstack实现,就是你要的反堆叠逻辑
# result = example_df.set_index(['group_id', 'Field'])['Value'].unstack().reset_index(drop=True)

转换效果

运行后输出的result完全匹配你期望的格式:

Field  a  b  c  d  e  f
0      A  1  3  2  3  1
1      B  2  4  1  5  0
2      C  9  8  7  6  5

补充说明

  • 该方法是pandas原生向量化实现,数据量越大,相比逐行循环的性能优势越明显
  • 如果后续每组的行数变化,只需要修改//后的分组长度数值即可,比如每组7行就写example_df.index //7
  • 即使同一组内Field的取值顺序偶尔错乱,透视逻辑也会自动按字段名对齐列,不会出现值错位的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 23:36:37