如何将DataFrame分组后的数据拆分至不同列并重构表格?
解决方法
可以通过分组内添加序号 + 数据重塑的方式实现需求,具体步骤如下:
1. 构造示例数据
先还原原始DataFrame:
import pandas as pd import numpy as np df = pd.DataFrame({ 'object': ['Fruit', 'Fruit', 'Fruit', 'Car', 'Car', 'Car'], 'Name': ['Banana', 'Apple', 'Melon', 'Fiat', 'BMW', np.nan], 'Color': ['Yellow', 'Red', 'Green', 'White', 'Black', np.nan] })
2. 为每个分组添加组内序号
用groupby.cumcount()给每个object分组内的行添加从1开始的序号,后续作为列名后缀:
df['idx'] = df.groupby('object').cumcount() + 1
3. 重塑数据生成目标格式
用pivot方法转置数据,再整理列名和索引:
# 转置数据,按object分组、idx作为列维度 result = df.pivot(index='object', columns='idx', values=['Name', 'Color']) # 合并层级列名,生成Name1、Color1这类格式 result.columns = [f'{col[0]}{col[1]}' for col in result.columns] # 把object从索引转回普通列 result = result.reset_index()
最终得到的result结构如下:
| object | Name1 | Name2 | Name3 | Color1 | Color2 | Color3 |
|---|---|---|---|---|---|---|
| Car | Fiat | BMW | NaN | White | Black | NaN |
| Fruit | Banana | Apple | Melon | Yellow | Red | Green |
补充说明
- 若不同分组的行数不一致,缺失位置会自动填充
NaN,完全匹配需求 cumcount()默认从0开始计数,加1是为了让列名后缀从1开始,和目标格式对齐
内容的提问来源于stack exchange,提问作者Gabriel Makhoul
相关产品推荐
相关产品推荐

