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方法实现需求,同时对列名做统一格式化处理,步骤如下:
- 用
pivot方法完成透视转换:指定Vehicle和Type作为行索引,Parameter作为列名,Value作为对应列的值,自动将所有参数转为列:
pivoted_df = df.pivot(index=["Vehicle", "Type"], columns="Parameter", values="Value").reset_index()
- 格式化列名(比如把
engine HP转为Engine,windows转为Windows),适配目标格式:
# 统一列名格式:首字母大写,含空格的参数取第一个单词 pivoted_df.columns = [col.split()[0].capitalize() if " " in col else col.capitalize() for col in pivoted_df.columns]
- 输出符合要求的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
相关产品推荐
相关产品推荐

