You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何更高效地转换Pandas DataFrame的列与元素对应关系?

Pandas DataFrame 映射转置的高效实现方案

问题说明

现有如下Pandas DataFrame:

import pandas as pd

list_dict = [{'good':'Ahmad', 'bad':'Reza', 'ugly':'Ali'},
             {'good':'David', 'bad':'Frank', 'ugly':'Alice'},
             {'good':'Ali', 'bad':'Alice', 'ugly':'Bob'}]
df = pd.DataFrame(list_dict)

原结构展示:

good    bad     ugly
0  Ahmad   Reza     Ali
1  David  Frank   Alice
2    Ali  Alice     Bob

需要转换为以下格式:

Ahmad  Reza    Ali  David  Frank  Alice    Bob
0    good   bad   ugly    NaN    NaN    NaN    NaN
1     NaN   NaN    NaN   good    bad   ugly    NaN
2     NaN   NaN   good    NaN    NaN    bad   ugly

当前实现方式为逐行转字典、交换键值对后生成目标DataFrame,现寻求更高效的替代方案。

高效实现方法

方法1:melt + pivot 组合

利用Pandas内置的重塑函数,实现矢量化操作:

# 保留行索引信息
df = df.reset_index()

# 宽表转长表,提取映射关系
melted_df = df.melt(id_vars='index', var_name='category', value_name='name')

# 透视生成目标结构
result = melted_df.pivot(index='index', columns='name', values='category')

# 重置索引并匹配目标列顺序(可选)
result = result.reset_index(drop=True)[['Ahmad', 'Reza', 'Ali', 'David', 'Frank', 'Alice', 'Bob']]

方法2:stack + unstack 组合

更简洁的层级索引操作方式:

# 堆叠列到行,构建多级索引
stacked = df.stack()

# 交换索引层级并反向透视
result = stacked.reset_index(level=1).set_index(0, append=True)['level_1'].unstack()

# 重置行索引
result = result.reset_index(drop=True)

方案优势

两种方法均基于Pandas的矢量化引擎,避免了逐行循环和字典转换的额外开销,在数据量较大时性能提升显著,同时代码结构更简洁、易维护。

内容的提问来源于stack exchange,提问作者Mohammad Mohammadidoust

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 05:50:27