我有一个pandas数据帧df
,如图所示。(df.to_dict()
在末尾给出):
model scenario module
AIM/CGE 2.0 ADVANCE_2020_1.5C-2100 wind_total_share high high
SSP1-19 wind_total_share high high
SSP2-19 wind_total_share high high
AIM/CGE 2.1 CD-LINKS_NPi2020_400 wind_total_share high high
TERL_15D_LowCarbonTransportPolicy wind_total_share medium medium
TERL_15D_NoTransportPolicy wind_total_share medium medium
GCAM 4.2 SSP1-19 wind_total_share medium medium
IMAGE 3.0.1 IMA15-AGInt wind_total_share low low
IMA15-Def wind_total_share low low
IMA15-Eff wind_total_share low low
model
、scenario
和module
是索引,而Infrastructure
和Investment
是数据帧的两列。我想将这两列转换为矩阵格式,其中基础设施类似于x轴,投资类似于Y轴。此外,在基础设施和投资方面,我需要将它们分为低、中、高三类。
在单元格中,我想知道满足给定变量(投资基础设施)的给定类别(低/中/高)的模型和场景的名称,如下面的屏幕截图所示。也可能存在这样的情况,即基础设施成本较高,但投资成本较低或中等,反之亦然。
我还想有另一个矩阵,它显示了落入给定单元的场景数量。第二个矩阵应如图所示:
我不熟悉通过修改现有数据帧来获得这种矩阵格式。是否有任何功能或模块可用于此目的?如何使用Python将数据帧转换为屏幕截图中所示的矩阵格式
df.to_dict()
如下所示:
{'Infrastructure': {('AIM/CGE 2.0',
'ADVANCE_2020_1.5C-2100',
'wind_total_share'): 'high',
('AIM/CGE 2.0', 'SSP1-19', 'wind_total_share'): 'high',
('AIM/CGE 2.0', 'SSP2-19', 'wind_total_share'): 'high',
('AIM/CGE 2.1', 'CD-LINKS_NPi2020_400', 'wind_total_share'): 'high',
('AIM/CGE 2.1',
'TERL_15D_LowCarbonTransportPolicy',
'wind_total_share'): 'medium',
('AIM/CGE 2.1', 'TERL_15D_NoTransportPolicy', 'wind_total_share'): 'medium',
('GCAM 4.2', 'SSP1-19', 'wind_total_share'): 'medium',
('IMAGE 3.0.1', 'IMA15-AGInt', 'wind_total_share'): 'low',
('IMAGE 3.0.1', 'IMA15-Def', 'wind_total_share'): 'low',
('IMAGE 3.0.1', 'IMA15-Eff', 'wind_total_share'): 'low'},
'Investment': {('AIM/CGE 2.0',
'ADVANCE_2020_1.5C-2100',
'wind_total_share'): 'high',
('AIM/CGE 2.0', 'SSP1-19', 'wind_total_share'): 'high',
('AIM/CGE 2.0', 'SSP2-19', 'wind_total_share'): 'high',
('AIM/CGE 2.1', 'CD-LINKS_NPi2020_400', 'wind_total_share'): 'high',
('AIM/CGE 2.1',
'TERL_15D_LowCarbonTransportPolicy',
'wind_total_share'): 'medium',
('AIM/CGE 2.1', 'TERL_15D_NoTransportPolicy', 'wind_total_share'): 'medium',
('GCAM 4.2', 'SSP1-19', 'wind_total_share'): 'medium',
('IMAGE 3.0.1', 'IMA15-AGInt', 'wind_total_share'): 'low',
('IMAGE 3.0.1', 'IMA15-Def', 'wind_total_share'): 'low',
('IMAGE 3.0.1', 'IMA15-Eff', 'wind_total_share'): 'low'}}
pivot_table
在这方面可以有所帮助第二个矩阵可通过以下方法直接获得:
其中:
对于第一个,可以首先重置索引以生成预期值:
在
df2
中,多个标识符被分组在一个列表中。如果希望每行一个,可以分解数据帧:得到
我进行了一段时间的头脑风暴,自己想出了解决办法。它很长,但看起来像这样
首先,我列出了基础设施和投资的高、中、低情景:
接下来,我做了高,高场景的交叉;基础设施和投资的高、中、高、低如下:
接下来,使用Excel文件,我重新创建了我想要制作的矩阵:
然后,我为数据帧的每个单元格分配了列表,如下所示:
我使用每个列表的
len()
对场景数矩阵做了同样的处理相关问题 更多 >
编程相关推荐