如何使用Pandas转置两列DataFrame 使原name列值转为新列?
Pandas 两列键值结构DataFrame转目标单行宽表实现
针对「name、value两列的原始窄表,将name列值转成新列名、对应value值填充为单行数据、忽略原有索引」的需求,以下为可直接运行的实现方案:
方法1:pivot 原生透视(最匹配场景逻辑)
- 核心逻辑为直接用name列的值作为新表列名,value列作为单元格填充值,单值键值场景下无需额外聚合操作
- 可直接复用的代码:
import pandas as pd # 对照原始数据构造示例df raw_df = pd.DataFrame({ "name": ["name", "address", "city"], "value": ["florida", "parkway", "Tampa"] }) # 核心转换步骤 target_df = raw_df.pivot( columns="name", values="value" ).reset_index(drop=True)
- 转换后结果完全符合要求:列名依次为name、address、city,仅1行有效数据,原有索引被完全丢弃。
方法2:字典映射构造(轻量化实现)
- 对于这类行数少、最终只需要单行的场景,直接把两列映射为字典传入DataFrame构造器,比透视方法更简洁
- 可直接复用的代码:
target_df = pd.DataFrame( [dict(zip(raw_df["name"], raw_df["value"]))] )
- 该方法生成的结果天生为单行结构,列顺序与原始name列的取值顺序完全一致,无需额外处理索引。
方法3:set_index + unstack 实现(兼容扩展场景)
- 该方法可兼容原始数据存在同名字段多值的场景,当前单值需求下也可直接使用
- 可直接复用的代码:
target_df = ( raw_df .set_index("name")["value"] .unstack() .to_frame() .T .reset_index(drop=True) )
补充说明:之前查阅的转置、透视类教程未找到适配方案的核心原因:多数同类示例面向多行长表的透视场景,没有提及单值键值对转单行时,只要在pivot后追加
reset_index(drop=True)即可直接压平为单行结构,不需要额外做行列转置操作。
内容的提问来源于stack exchange,提问作者Dmitry Shinelev
相关产品推荐
相关产品推荐

