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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 12:15:32