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

基于PySpark按split列值生成透视表并创建新列

实现按split列展开变量为带前缀的独立列

针对需求——基于split列的取值,将var1、var2、var3转换为split{值}_var{序号}格式的新列,按time和student分组聚合,缺失的split值对应列留空——可以用Python的pandas库快速实现,具体方案如下:

代码实现

import pandas as pd

# 构造示例输入数据(实际使用时可替换为pd.read_csv等读取数据源的方式)
data = [
    ["t1", "Student1", "A", 1, 3, 7],
    ["t1", "Student1", "B", 2, 5, 6],
    ["t1", "Student1", "C", 3, 1, 9],
    ["t2", "Student1", "A", 5, 3, 7],
    ["t2", "Student1", "B", 9, 6, 3],
    ["t2", "Student1", "C", 3, 5, 3],
    ["t1", "Student2", "A", 1, 2, 8],
    ["t1", "Student2", "C", 7, 4, 0],
]
df = pd.DataFrame(data, columns=["time", "student", "split", "var1", "var2", "var3"])

# 执行透视,按time+student分组,split作为列维度展开var列
pivoted = df.pivot(
    index=["time", "student"],
    columns="split",
    values=["var1", "var2", "var3"]
)

# 重命名列,转为splitX_varY的格式
pivoted.columns = [f"split{col[1]}_{col[0]}" for col in pivoted.columns]

# 重置索引,将time和student从索引转为普通列
result = pivoted.reset_index()

# 将缺失值替换为空字符串,匹配示例输出格式
result = result.fillna("")

# 查看最终结果
print(result)

输出结果

timestudentsplitA_var1splitA_var2splitA_var3splitB_var1splitB_var2splitB_var3splitC_var1splitC_var2splitC_var3
0t1Student1137256319
1t1Student2128740
2t2Student1537963353

关键步骤说明

  1. 透视操作:使用pivot方法(若存在重复的time+student+split组合,可改用pivot_table并指定aggfunc聚合规则),快速将split的不同取值转为列维度,同时展开目标变量列。
  2. 列名格式化:通过列表推导式将透视生成的多级列(如('var1', 'A'))合并为要求的splitA_var1格式。
  3. 缺失值处理:用fillna("")将透视产生的NaN替换为空字符串,完全匹配示例中的空白显示效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 20:45:31