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

Pandas:将字段名与值列转换为独立列的高效方法求助

Pandas 长表转宽表优化方案

问题背景

现有DataFrame数据中,字段名称集中在Field_Names列,对应的值存于Field_Values列,示例数据如下:

import pandas as pd

dummy_data = {
'Field_Names': ['Field_1','Field_2','Field_3','Field_1','Field_2','Field_3'],
'Field_Values': ['Bob','John','Kyle','Eric','Pat','Rana']
}
dummy_df = pd.DataFrame(dummy_data)

当前通过逐个过滤字段名生成子DataFrame再拼接的方式实现转置,操作繁琐,需要更高效的Pandas原生方法。期望将数据转换为每个字段名作为列、对应值按行排列的格式,最终输出如下:

Field_1 Field_2 Field_3
0     Bob    John    Kyle
1    Eric     Pat    Rana

解决方案

方法1:pivot + cumcount(推荐)

该方法通过给每个字段分组内的行添加序号,再利用pivot完成转置,逻辑清晰且效率高:

# 为每个Field_Names分组内的行生成连续序号
dummy_df['row_idx'] = dummy_df.groupby('Field_Names').cumcount()

# 执行转置:以序号为索引,字段名为列,值为对应内容
result = dummy_df.pivot(index='row_idx', columns='Field_Names', values='Field_Values')

# 清理索引和列名标识
result = result.reset_index(drop=True)
result.columns.name = None

print(result)

方法2:groupby + apply(list)

如果仅需将每组值转为列表后构造DataFrame,可使用此方法:

# 按Field_Names分组,将每组的Field_Values转为列表
grouped_data = dummy_df.groupby('Field_Names')['Field_Values'].apply(list)

# 将列表转为DataFrame并转置行和列
result = pd.DataFrame(grouped_data.tolist(), index=grouped_data.index).T

print(result)

内容的提问来源于stack exchange,提问作者Carson Whitley

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 20:45:53