Multi-index Pandas DataFrame行转列:按分组将pid转为横向step列
实现方法
你可以通过分组顺序计数+层级展开的方式完成转换,代码如下:
import pandas as pd # 假设你的原始DataFrame变量名为df # 1. 按id、vid分组,为分组内的每行生成从1开始的顺序编号(完全保留原有行顺序) step_seq = df.groupby(level=['id', 'vid']).cumcount() + 1 # 2. 将编号追加为索引的第三层,提取pid列后展开为横向列 res = df.set_index(step_seq, append=True)['pid'].unstack() # 3. 重命名列名为stepX格式 res.columns = [f'step{i}' for i in res.columns]
如果需要统一补全所有分组到最大步数字段,额外添加以下代码即可:
max_step = res.shape[1] res = res.reindex(columns=[f'step{i+1}' for i in range(max_step)])
原理说明
groupby(level=['id','vid']).cumcount()会严格按照原DataFrame的行顺序给每个分组内的行生成从0开始的序号,完全符合你要求的「原有顺序对应step从左到右」的规则unstack()会自动把缺失的步位填充为NaN,不需要额外处理空值- 转换后会保留原有的
id、vid两层行索引,和你给出的示例输出结构完全一致
内容的提问来源于stack exchange,提问作者S44
相关产品推荐
相关产品推荐

