如何对长格式DataFrame执行pivot透视转换得到目标宽表
Pandas长表透视转宽表实现方法
你的需求是标准的长表转宽表场景,由于每个SN与Feature的取值组合唯一,无重复值需要聚合,直接使用pandas的pivot()方法即可完成转换。
实现步骤
- 第一步:确认原始表结构
原始长表包含4个字段,其中核心业务字段为:SN:序列号,作为宽表的行唯一标识Feature:特征名,取值为table/mix_ratio/date,作为宽表的列名value:特征值,作为宽表的单元格填充值
- 第二步:编写透视代码
以你描述的样例数据为例,完整可运行代码如下:
import pandas as pd # 构造样例长表数据 df_long = pd.DataFrame({ "index": list(range(9)), "Feature": ["table", "mix_ratio", "date"] * 3, "value": ["A", 0.12, "2/2/2022", "B", 0.15, "2/3/2022", "C", 0.17, "2/4/2022"], "SN": [12345]*3 + [12346]*3 + [12347]*3 }) # 执行透视转换 df_wide = df_long.pivot( index="SN", columns="Feature", values="value" ).reset_index() # 将SN从行索引还原为普通数据列
- 第三步:结果校验
转换完成的宽表结构和你预期完全一致,样例输出如下:
| SN | table | mix_ratio | date |
|---|---|---|---|
| 12345 | A | 0.12 | 2/2/2022 |
| 12346 | B | 0.15 | 2/3/2022 |
| 12347 | C | 0.17 | 2/4/2022 |
注意事项
如果你的原始数据存在同一个SN+Feature对应多条记录的情况,需要替换为pivot_table()方法并指定聚合规则,例如取第一条匹配值可以写为:
df_wide = df_long.pivot_table( index="SN", columns="Feature", values="value", aggfunc="first" ).reset_index()
在组合值唯一的场景下,优先使用pivot(),执行效率更高。
内容的提问来源于stack exchange,提问作者Ignacio Peñafiel Miguel
相关产品推荐
相关产品推荐

