如何将DataFrame按id1分组并实现行转列?
实现方法
可以通过Pandas的pivot方法结合列名调整来实现需求,步骤如下:
- 构造示例DataFrame(如果已有数据可跳过此步):
import pandas as pd data = { 'id1': ['a1', 'a1', 'a1', 'k1', 'k1', 'k1'], 'id2': ['a2', 'b2', 'c2', 'p2', 'f2', 'd2'], 'val': [10, 11, 9, 6, 5, 2], 'type': ['a', 'b', 'c', 'a', 'b', 'c'] } df = pd.DataFrame(data)
- 执行透视操作:
使用pivot将id1作为行索引,type作为列维度,同时对id2和val两个字段进行透视:
pivoted = df.pivot(index='id1', columns='type', values=['id2', 'val'])
- 合并多层列名:
透视后会生成多层列名(如('id2', 'a')),将其合并为预期的id2_a格式:
pivoted.columns = pivoted.columns.map(lambda x: f'{x[0]}_{x[1]}')
- 重置索引并调整列顺序:
将id1从索引转为普通列,并调整列的顺序与预期结果一致:
result = pivoted.reset_index() result = result[['id1', 'id2_a', 'val_a', 'id2_b', 'val_b', 'id2_c', 'val_c']]
执行后输出的result即为目标格式:
id1 id2_a val_a id2_b val_b id2_c val_c 0 a1 a2 10 b2 11 c2 9 1 k1 p2 6 f2 5 d2 2
内容的提问来源于stack exchange,提问作者user12314164
相关产品推荐
相关产品推荐

