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

PySpark DataFrame行转列问题:按月份转换未达预期结果

PySpark 行转列(按月份映射)解决方案

你之前的写法缺少聚合函数,pivot必须配合聚合操作才能完成行转列的映射,因为分组后需要对每个(Month, col1)组合的值做合并处理。

假设你的原始数据结构(模拟附图常见场景):

Monthcol1value
1月指标A100
1月指标B200
2月指标A150
2月指标B250

目标格式:

Month指标A指标B
1月100200
2月150250

正确实现代码:

from pyspark.sql import functions as F

# 替换成你的实际DataFrame名称
raw_df = ... 

# 核心行转列逻辑:按月份分组 + 转置目标列 + 聚合取值
pivoted_df = raw_df.groupBy("Month") \
                   .pivot("col1") \
                   .agg(F.first("value"))  # 若每个(Month, col1)组合唯一,用first/max/min都可;有重复数据需合并则用sum

# 查看转换结果
pivoted_df.show()

补充说明:

  1. 聚合函数选择:如果每个(Month, col1)组合只有一条数据,first/max/min结果一致;如果存在重复数据需要合并计算,改用sum/avg等对应聚合逻辑。
  2. 月份排序优化:如果需要按月份顺序展示,可额外处理:
# 针对"1月""2月"这类字符串格式的月份提取数字排序
pivoted_df = pivoted_df.withColumn("month_idx", F.substring("Month", 0, 1).cast("int")) \
                       .orderBy("month_idx") \
                       .drop("month_idx")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 05:12:44