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

Python中动态转置DataFrame参数列(未知参数内容与数量)

问题描述

假设我有如下表格(对应下方Python代码生成的pandas DataFrame):

import pandas as pd
data = [["Car","Sport","Wheel", 4], 
        ["Car", "Sport","engine HP", 65], 
        ["Car", "Sport","windows", 5], 
        ["Car","Van","Wheel", 4], 
        ["Car", "Van","engine HP", 85], 
        ["Car", "Van","windows", 8],
        ["Truck","Small","Wheel", 4], 
        ["Truck", "Small","engine HP", 125], 
        ["Truck", "Small","windows", 2],
        ["Truck","Large","Wheel", 8], 
        ["Truck", "Large","engine HP", 200], 
        ["Truck", "Large","windows", 2]
        ]
  
df = pd.DataFrame(data)
# 定义表头
df.columns = ["Vehicle", "Type","Parameter","Value"]

需要对该DataFrame进行处理,将Parameter对应的Value转置为列,但预先不知道Parameter列的具体内容及参数类型数量,最终要得到如下结构的表格:

"Vehicle","Type","Wheel","Engine","Windows"
"Car","Sport",4,65,5
"Car","Van",4,85,8
"Truck","Small",4,125,2
"Truck","Large",8,200,2

请问该如何实现?

解决方案

可以借助pandas的pivot方法实现需求,同时对列名做统一格式化处理,步骤如下:

  1. 用pivot方法完成透视转换:指定Vehicle和Type作为行索引,Parameter作为列名,Value作为对应列的值,自动将所有参数转为列:
pivoted_df = df.pivot(index=["Vehicle", "Type"], columns="Parameter", values="Value").reset_index()
  1. 格式化列名(比如把engine HP转为Engine,windows转为Windows),适配目标格式:
# 统一列名格式:首字母大写,含空格的参数取第一个单词
pivoted_df.columns = [col.split()[0].capitalize() if " " in col else col.capitalize() for col in pivoted_df.columns]
  1. 输出符合要求的CSV格式内容:
print(pivoted_df.to_csv(index=False, quotechar='"'))

完整可运行代码:

import pandas as pd

data = [["Car","Sport","Wheel", 4], 
        ["Car", "Sport","engine HP", 65], 
        ["Car", "Sport","windows", 5], 
        ["Car","Van","Wheel", 4], 
        ["Car", "Van","engine HP", 85], 
        ["Car", "Van","windows", 8],
        ["Truck","Small","Wheel", 4], 
        ["Truck", "Small","engine HP", 125], 
        ["Truck", "Small","windows", 2],
        ["Truck","Large","Wheel", 8], 
        ["Truck", "Large","engine HP", 200], 
        ["Truck", "Large","windows", 2]
        ]
  
df = pd.DataFrame(data)
df.columns = ["Vehicle", "Type","Parameter","Value"]

# 透视转换
pivoted_df = df.pivot(index=["Vehicle", "Type"], columns="Parameter", values="Value").reset_index()

# 格式化列名
pivoted_df.columns = [col.split()[0].capitalize() if " " in col else col.capitalize() for col in pivoted_df.columns]

# 输出目标格式内容
print(pivoted_df.to_csv(index=False, quotechar='"'))

该方案无需提前知晓Parameter的具体内容和数量,pivot方法会自动识别所有参数并转为对应列,完全适配需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 01:50:30