如何不使用聚合函数将DataFrame行转为多列实现转置
无聚合实现DataFrame分组行转多列方案
你要实现的分组行展开为多列的操作不需要依赖任何聚合函数,核心是先给同组数据打组内序号,再做维度旋转即可,具体实现步骤如下:
- 首先构造原始测试数据
import pandas as pd df = pd.DataFrame({ 'Type': ['A', 'A', 'B', 'B'], 's': [1, 2, 4, 5], 'h': [4, 5, 7, 2] })
- 给每个
Type分组内的行生成从1开始的递增序号,这一步是逐行计数,不涉及聚合
df['seq'] = df.groupby('Type').cumcount() + 1
- 调整表结构做维度旋转,把序号维度从行转到列,全程无聚合计算
# 设置多层索引,保留Type为行维度,seq作为待展开的列维度 df = df.set_index(['Type', 'seq']) # 旋转维度,将seq对应的行展开为列 df = df.unstack('seq') # 调整列名,拼接为「原列名_序号」的格式 df.columns = [f'{col}_{seq}' for col, seq in df.columns] # 将Type从索引还原为普通列 df = df.reset_index()
执行完成后得到的结果完全匹配目标结构:
| Type | s_1 | h_1 | s_2 | h_2 |
|---|---|---|---|---|
| A | 1 | 4 | 2 | 5 |
| B | 4 | 7 | 5 | 2 |
说明:该方案会自动适配每个Type分组下的行数,如果某组有n条记录,会自动生成对应s_1s_n、h_1h_n的列,不需要提前预设分组大小。
内容的提问来源于stack exchange,提问作者Medex
相关产品推荐
相关产品推荐

