pandas如何重塑DataFrame 拆分单个分类列为多列保留关联信息
pandas长表转宽表实现方案
你需要做的是把按变量行存储的长表,转换为每个变量单独成列的宽表,直接用pandas的透视接口即可实现,操作逻辑如下:
- 明确需要保留的关联维度字段:行政区
canton、时间time、站点stn、气候情景RCPs,这些字段会作为每一行的唯一标识保留 - 以
var列为拆分依据,把value列的取值填充到var对应取值的新列中 - 转换完成后重置索引,把行维度的索引转回普通数据列即可
核心实现代码:
# 长表转宽表核心逻辑 df_after = df_before.pivot( index = ["canton", "time", "stn", "RCPs"], columns = "var", values = "value" ).reset_index() # 按需调整列顺序,和目标结构对齐 df_after = df_after[["canton", "time", "stn", "RCPs", "tas", "tasmin", "tasmax"]]
异常情况处理
如果原始数据存在同一组维度+同一变量对应多条记录的情况,pivot方法会触发值重复报错,这时候替换为pivot_table方法,指定聚合规则即可:
df_after = df_before.pivot_table( index = ["canton", "time", "stn", "RCPs"], columns = "var", values = "value", aggfunc = "first" # 重复记录取第一条,也可根据需求替换为mean、sum等聚合函数 ).reset_index()
转换后如果后续var列新增pr等其他变量,会自动生成对应的列,不需要手动提前定义列名。
内容的提问来源于stack exchange,提问作者anbanael
相关产品推荐
相关产品推荐

