如何按分组变量将Pandas DataFrame转换为多列宽格式?
Pandas按分组将DataFrame转为指定宽格式的实现方法
针对分组内数据行数不一致的转宽格式需求,可以通过添加组内序号+多级列unstack的方式实现,具体步骤如下:
1. 准备示例数据
先还原原始DataFrame:
import pandas as pd df = pd.DataFrame({ 'Group_var': [1, 1, 2, 3, 3, 3], 'type': [11, 12, 22, 33, 34, 35], 'value': [111, 111, 222, 333, 334, 335] })
2. 添加组内序号
给每个Group_var分组内的行标记顺序(从1开始),这是实现动态列名的关键:
df['seq'] = df.groupby('Group_var').cumcount() + 1
处理后的数据会新增seq列,每个分组内的行依次标记为1、2、3...
3. 转换为宽格式
通过设置索引+unstack实现行转列,再调整列名格式:
# 设置多级索引并unstack,将seq的行转为列 result = df.set_index(['Group_var', 'seq']).unstack() # 重命名列,将多级列名(如('type',1))转为type_1格式 result.columns = [f'{col[0]}_{col[1]}' for col in result.columns] # 重置索引,让Group_var回到列的位置 result = result.reset_index() # 将空值填充为空字符串,匹配示例格式 result = result.fillna('')
最终结果
执行上述代码后,result的输出即为期望的格式:
Group_var type_1 value_1 type_2 value_2 type_3 value_3 0 1 11 111 12 111 1 2 22 222 2 3 33 333 34 334 35 335
内容的提问来源于stack exchange,提问作者pinegulf
相关产品推荐
相关产品推荐

