Python Pandas如何将按ID分组的长格式DataFrame转换为目标宽格式
Pandas DataFrame 格式转换方案
你需要实现的是按ID分组将组内多条记录横向展开为多列的转换操作,可通过pandas原生向量化操作实现,性能足以适配大批量数据处理场景,具体实现代码如下:
首先导入依赖并构造示例数据:
import pandas as pd # 示例数据构造 data = {'ID' : [1,1,1,2,2,2,2], 'Name' : ['OO', 'XX', 'YY','ZZ', 'MM', 'VV', 'RR'], 'Rank' : [5,6,7,8,9,10,11], 'Price' : [20,30,40,50,60,70,80]} df = pd.DataFrame(data)
核心转换代码
# 1. 为每个ID分组内的记录生成序号 df['group_idx'] = df.groupby('ID').cumcount() + 1 # 2. 复合索引后展开为宽表 df_wide = df.set_index(['ID', 'group_idx']).unstack(level='group_idx') # 3. 合并多层列名为单层级命名 df_wide.columns = [f'{col[0]}_{col[1]}' for col in df_wide.columns] # 4. 重置索引将ID恢复为普通列 df_wide = df_wide.reset_index()
转换后结果和目标格式完全匹配。
批量处理适配说明
- 上述实现全部为pandas原生向量化操作,无自定义循环,处理百万行级数据无性能压力
- 读取大体积Excel文件时,可配合
pd.read_excel的chunksize参数分块读取处理,避免内存溢出 - 若不同ID对应的记录数量不一致,转换后缺失的字段会自动填充NaN,无需额外适配
内容的提问来源于stack exchange,提问作者Skittles
相关产品推荐
相关产品推荐

