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

如何合并重复列并堆叠对应值?(DataFrame字典数据处理)

问题描述

我有一个从DataFrame转换来的字典数据如下:

{0: ['RevitCategory', 'Door'],
 1: ['DesignModelID', 'ModelA_Rev1'],
 2: ['DesignObjectID', 'ModelA_Rev1_Object1'],
 3: ['TypeName', 'ARC_DOR_INTERNAL'],
 4: ['Function', 'Internal'],
 5: ['Uniclass2015_Ss', 'Ss_25_30_20_25 : Doorset systems'],
 6: ['IfcExportAs', 'IfcDoorType.DOOR'],
 7: ['NRM1Classification', '2.8.1.1 Internal doors'],
 8: ['RevitCategory', 'Wall'],
 9: ['DesignModelID', 'ModelA_Rev1'],
 10: ['DesignObjectID', 'ModelA_Rev1_Object2'],
 11: ['TypeName', 'ARC_WALL_PARTITION_TYPE1'],
 12: ['Function', 'Internal'],
 13: ['Uniclass2015_Ss', 'Ss_25_10_30_35 : Gypsum board partition systems'],
 14: ['IfcExportAs', 'IfcWallType.PARTITIONING'],
 15: ['NRM1Classification', '2.7.1.1 Internal walls'],
 16: ['Area', 5],
 17: ['RevitCategory', 'Wall'],
 18: ['DesignModelID', 'ModelA_Rev1'],
 19: ['DesignObjectID', 'ModelA_Rev1_Object3'],
 20: ['TypeName', 'ARC_WALL_PARTITION_TYPE1'],
 21: ['Function', 'Internal'],
 22: ['Uniclass2015_Ss', 'Ss_25_10_30_35 : Gypsum board partition systems'],
 23: ['IfcExportAs', 'IfcWallType.PARTITIONING'],
 24: ['NRM1Classification', '2.7.1.1 Internal walls'],
 25: ['Area', 5],
 26: ['RevitCategory', 'Wall'],
 27: ['DesignModelID', 'ModelA_Rev1'],
 28: ['DesignObjectID', 'ModelA_Rev1_Object4'],
 29: ['TypeName', 'ARC_WALL_PARTITION_TYPE1'],
 30: ['Function', 'Internal'],
 31: ['Uniclass2015_Ss', 'Ss_25_10_30_35 : Gypsum board partition systems'],
 32: ['IfcExportAs', 'IfcWallType.PARTITIONING'],
 33: ['NRM1Classification', '2.7.1.1 Internal walls'],
 34: ['Area', 5]
}

需要合并重复的列名,把对应的值堆叠成多行,得到类似如下的表格结构化输出:

RevitCategory  | DesignModelID  | DesignObjectID          |  etc. 
-----------------------------------------------------------------               
Door           | ModelA_Rev1    |  ModelA_Rev1_Object1    |
Wall           | ModelA_Rev1    |  ModelA_Rev1_Object2    |
Wall           | ModelA_Rev1    |  ModelA_Rev1_Object3    |
Wall           | ModelA_Rev1    |  ModelA_Rev1_Object4    |
-----------------------------------------------------------------
解决方案

用Python的pandas库可以快速实现需求,步骤如下:

1. 解析字典并分组对象

把原字典中的[列名, 值]条目转换成键值对,再按完整对象分组:

import pandas as pd

# 原字典数据
data = {0: ['RevitCategory', 'Door'],
 1: ['DesignModelID', 'ModelA_Rev1'],
 2: ['DesignObjectID', 'ModelA_Rev1_Object1'],
 3: ['TypeName', 'ARC_DOR_INTERNAL'],
 4: ['Function', 'Internal'],
 5: ['Uniclass2015_Ss', 'Ss_25_30_20_25 : Doorset systems'],
 6: ['IfcExportAs', 'IfcDoorType.DOOR'],
 7: ['NRM1Classification', '2.8.1.1 Internal doors'],
 8: ['RevitCategory', 'Wall'],
 9: ['DesignModelID', 'ModelA_Rev1'],
 10: ['DesignObjectID', 'ModelA_Rev1_Object2'],
 11: ['TypeName', 'ARC_WALL_PARTITION_TYPE1'],
 12: ['Function', 'Internal'],
 13: ['Uniclass2015_Ss', 'Ss_25_10_30_35 : Gypsum board partition systems'],
 14: ['IfcExportAs', 'IfcWallType.PARTITIONING'],
 15: ['NRM1Classification', '2.7.1.1 Internal walls'],
 16: ['Area', 5],
 17: ['RevitCategory', 'Wall'],
 18: ['DesignModelID', 'ModelA_Rev1'],
 19: ['DesignObjectID', 'ModelA_Rev1_Object3'],
 20: ['TypeName', 'ARC_WALL_PARTITION_TYPE1'],
 21: ['Function', 'Internal'],
 22: ['Uniclass2015_Ss', 'Ss_25_10_30_35 : Gypsum board partition systems'],
 23: ['IfcExportAs', 'IfcWallType.PARTITIONING'],
 24: ['NRM1Classification', '2.7.1.1 Internal walls'],
 25: ['Area', 5],
 26: ['RevitCategory', 'Wall'],
 27: ['DesignModelID', 'ModelA_Rev1'],
 28: ['DesignObjectID', 'ModelA_Rev1_Object4'],
 29: ['TypeName', 'ARC_WALL_PARTITION_TYPE1'],
 30: ['Function', 'Internal'],
 31: ['Uniclass2015_Ss', 'Ss_25_10_30_35 : Gypsum board partition systems'],
 32: ['IfcExportAs', 'IfcWallType.PARTITIONING'],
 33: ['NRM1Classification', '2.7.1.1 Internal walls'],
 34: ['Area', 5]
}

# 自动按对象分组:以RevitCategory为每个对象的起始点
objects = []
current_obj = {}
for item in data.values():
    col_name, val = item
    current_obj[col_name] = val
    # 遇到对象的结尾标识时,保存当前对象并重置
    if col_name in ['NRM1Classification', 'Area']:
        objects.append(current_obj)
        current_obj = {}

# 转换为DataFrame
df = pd.DataFrame(objects)

2. 输出结构化表格

直接将DataFrame转换为Markdown格式表格:

print(df.to_markdown(index=False))

输出结果如下:

RevitCategoryDesignModelIDDesignObjectIDTypeNameFunctionUniclass2015_SsIfcExportAsNRM1ClassificationArea
DoorModelA_Rev1ModelA_Rev1_Object1ARC_DOR_INTERNALInternalSs_25_30_20_25 : Doorset systemsIfcDoorType.DOOR2.8.1.1 Internal doorsnan
WallModelA_Rev1ModelA_Rev1_Object2ARC_WALL_PARTITION_TYPE1InternalSs_25_10_30_35 : Gypsum board partition systemsIfcWallType.PARTITIONING2.7.1.1 Internal walls5
WallModelA_Rev1ModelA_Rev1_Object3ARC_WALL_PARTITION_TYPE1InternalSs_25_10_30_35 : Gypsum board partition systemsIfcWallType.PARTITIONING2.7.1.1 Internal walls5
WallModelA_Rev1ModelA_Rev1_Object4ARC_WALL_PARTITION_TYPE1InternalSs_25_10_30_35 : Gypsum board partition systemsIfcWallType.PARTITIONING2.7.1.1 Internal walls5

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 23:10:31