如何使用Pandas将含Name/Value列的数据集按行值实现行转列
解决Pandas长格式转宽格式的分组重塑问题
嘿,这个需求很典型,咱们可以用Pandas的分组和数据重塑功能轻松搞定。你的原始数据是长格式(Long Format),每3行对应一组完整的记录(包含code、classe、series三个字段),核心思路是先给每组添加一个分组标识,再把长格式转成宽格式。
具体步骤和代码实现
导入数据并创建分组索引
首先我们给每3行数据分配一个唯一的分组ID,这样后续就能把同一组的行合并成一行:import pandas as pd data = [['code',10],['classe',12],['series','B'], ['code',12],['classe',1], ['series','C'],['code',16],['classe',18],['series','A']] df1 = pd.DataFrame(data,columns=['Name','Value']) # 每3行分为一组,生成group_id df1['group_id'] = df1.index // 3用pivot函数转成宽格式
利用pivot指定行索引、列名和对应的值,就能得到你想要的格式:df_result = df1.pivot(index='group_id', columns='Name', values='Value').reset_index(drop=True)
验证结果
运行后df_result的输出如下,完全符合你的需求:
code classe series 0 10 12 B 1 12 1 C 2 16 18 A
另一种实现方式(用unstack)
如果你偏好unstack的写法,也可以这样做:
df1['group_id'] = df1.index // 3 df_result = df1.set_index(['group_id', 'Name'])['Value'].unstack('Name').reset_index(drop=True)
这两种方法本质是一样的,都是先分组再重塑,你可以根据自己的习惯选择。
内容的提问来源于stack exchange,提问作者M-M
相关产品推荐
相关产品推荐

