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

PySpark实现Pandas melt式列转行(支持海量列)

在PySpark中实现类似Pandas melt的列转行操作

要实现和Pandas melt完全等效的PySpark操作,且无需手动枚举数千列,核心是用Spark SQL的stack函数配合动态列名生成,具体步骤如下:

1. 动态获取需要转置的列

先从原DataFrame中筛选出除Date外的所有列(也就是要转为行的列):

cols_to_melt = [col for col in df.columns if col != "Date"]

2. 构造stack表达式

stack函数需要指定转置列的数量,以及成对的「列名字符串」和「列引用」,我们用代码动态生成这个表达式:

# 常规列名的情况
stack_expr = f"stack({len(cols_to_melt)}, {', '.join([f\"'{col}', {col}\" for col in cols_to_melt])}) as (Location, Value)"

# 如果列名包含特殊字符(比如空格、特殊符号),用反引号包裹列引用
# stack_expr = f"stack({len(cols_to_melt)}, {', '.join([f\"'{col}', `{col}`\" for col in cols_to_melt])}) as (Location, Value)"

3. 执行转换

用selectExpr执行构造好的表达式,同时保留Date列:

result_df = df.selectExpr("Date", stack_expr)

效果说明

转换后的result_df结构和Pandas melt输出完全一致:

  • Date列保留原数据
  • Location列对应原表的列名(如col_1、col_2)
  • Value列对应原表中该列的具体值

这个方法自动适配所有非Date列,不管列数有多少,完全无需手动逐个枚举。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 05:37:05