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

使用Pandas将measure列按取值转换为Deaths和Prevalence两列

解决长表转宽表:将Deaths和Prevalence转为独立列

嘿,这是个非常常见的长格式DataFrame转宽格式的需求,用pandas的pivot()方法就能完美解决,我给你详细说明操作步骤:

核心代码实现

假设你的原始DataFrame变量名为df,直接用以下代码即可完成转换:

import pandas as pd

# 执行转置操作
df_wide = df.pivot(
    index=['location', 'cause'],  # 作为行唯一标识的列
    columns='measure',            # 要转为列的字段
    values='val'                  # 填充新列的值来源
).reset_index()

# 移除列名上方的冗余标签,让结果更整洁
df_wide = df_wide.rename_axis(None, axis=1)

代码参数解释

  • index=['location', 'cause']:指定**州(location)+疾病类型(cause)**作为每行的唯一标识,确保每个组合只对应一行数据
  • columns='measure':把measure字段的两个取值(Deaths、Prevalence)直接转换为两个独立的列
  • values='val':用原表中val字段的数值,填充到新生成的Deaths和Prevalence列中
  • reset_index():将原本作为索引的location和cause重新转为普通列,方便后续的筛选、分析操作
  • rename_axis(None, axis=1):移除列名顶部的"measure"标签,让最终的DataFrame结构更清爽

转换后的示例结果

转换后你会得到这样的宽格式DataFrame:

locationcauseDeathsPrevalence
Alabamasickness10.0450.05
Alabamasickness20.0010.003
Alaskasickness1......
............

特殊情况处理(可选)

如果你的数据中存在同一个州+疾病+measure组合对应多个val值的情况(虽然你提到每个组合唯一,但还是提个醒),可以用pivot_table()配合聚合函数来处理,比如取第一个值或者平均值:

df_wide = pd.pivot_table(
    df,
    index=['location', 'cause'],
    columns='measure',
    values='val',
    aggfunc='first'  # 或者用'mean'、'sum'等聚合方式
).reset_index().rename_axis(None, axis=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:52:09