如何用Pandas将表格重复行转为以GHG类型为列名的结构
问题描述
现有一个已过滤掉GHG列空值的DataFrame pivot_notNone,包含UOM、GHG Conversion Factor 2022、Unit、GHG四列,共4312行。想要将GHG列的取值(N2O、CO2、CH4)作为新列名,对应填充GHG Conversion Factor 2022的数据,同时按UOM和Unit分组展示。但使用a = pivot_notNone.pivot(columns=['GHG'],values='GHG Conversion Factor 2022')后,结果存在大量NaN且未按UOM/Unit分组,不符合预期。
解决方案
问题出在未指定分组的索引键,导致pivot无法将同一UOM+Unit的行合并。可以用以下两种方法解决:
方法1:使用pivot_table(推荐处理含重复分组的场景)
# 按UOM和Unit分组,将GHG转为列,取值为GHG Conversion Factor 2022 result = pivot_notNone.pivot_table( index=['UOM', 'Unit'], columns='GHG', values='GHG Conversion Factor 2022', aggfunc='first' # 若同一分组下同一GHG有多值,取第一个;可根据需求换mean/sum等 ).reset_index() # 确保列顺序为UOM、Unit、N2O、CO2、CH4,缺失的GHG列保留为NaN result = result.reindex(columns=['UOM', 'Unit', 'N2O', 'CO2', 'CH4'])
方法2:使用set_index + unstack(适合分组无重复的场景)
如果数据中每个(UOM, Unit, GHG)组合唯一,可直接用索引转换:
# 设置多级索引后,将GHG维度展开为列 result = pivot_notNone.set_index(['UOM', 'Unit', 'GHG'])['GHG Conversion Factor 2022'].unstack('GHG').reset_index() # 统一列顺序 result = result.reindex(columns=['UOM', 'Unit', 'N2O', 'CO2', 'CH4'])
关键说明
- 指定
index=['UOM', 'Unit']后,同一UOM+Unit的行会被合并到同一行,不同GHG作为列展示,解决了分组问题。 - 结果中的
NaN是正常的:如果某个UOM+Unit组合下没有对应GHG的数据,该位置自然为空,可根据需求用fillna(0)或其他值填充。
内容的提问来源于stack exchange,提问作者aca1803
相关产品推荐
相关产品推荐

