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

Pandas如何将长格式DataFrame转换为指定格式宽表

pandas长表转指定格式宽表实现方案

不需要手动重命名列,可自动适配不同分组下alt.var的数量差异,全流程向量化运算适配大数据集,步骤如下:

  • 拆分字段按不同逻辑处理:
    • wei/odd:按alt.var取值展开为宽列,自动生成[字段名].[alt.var值]格式的列名
    • cou/cla:同一chid.var+id.var分组内取值固定,分组取首个值即可
    • pla:取分组内pla为TRUE对应的alt.var值

完整实现代码

import pandas as pd

# 处理wei、odd列的宽表转换
pivot_res = df.pivot(
    index=["chid.var", "id.var"],
    columns="alt.var",
    values=["wei", "odd"]
)
# 自动拼接生成目标格式列名
pivot_res.columns = [f"{col[0]}.{col[1]}" for col in pivot_res.columns]
pivot_res = pivot_res.reset_index()

# 处理分组固定字段和pla字段
group_res = df.groupby(["chid.var", "id.var"], as_index=False).agg(
    cou=("cou", "first"),
    cla=("cla", "first"),
    pla=("alt.var", lambda x: x[df.loc[x.index, "pla"]].iloc[0])
)

# 合并结果并调整列顺序匹配目标格式
final_res = pivot_res.merge(group_res, on=["chid.var", "id.var"])
# 自动按alt.var的所有取值生成列顺序,无需手动枚举
alt_values = sorted(df["alt.var"].unique())
final_col_order = ["chid.var", "id.var"] + \
                  [f"wei.{v}" for v in alt_values] + \
                  [f"odd.{v}" for v in alt_values] + \
                  ["cou", "cla", "pla"]
final_res = final_res[final_col_order]

逻辑说明

  • 列名自动生成:不需要提前枚举alt.var的取值范围,即使后续数据出现新的alt.var值(如4、5),也会自动生成对应列,缺失值自动填充NaN
  • 效率保障:全量使用pandas内置向量化方法,无逐行循环,即使千万级数据集也能高效运行
  • 适配特殊规则:如果同一分组下存在多个pla=TRUE的行,可修改pla的聚合函数(如取max/min)匹配业务规则
    运行上述代码得到的结果和给出的目标宽表完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 16:39:19