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

PySpark实现列值条件处理生成新列w的技术咨询

PySpark DataFrame 按规则生成新列w的解决方案

先明确示例输入与期望输出,直观展示需求:

示例输入

x
<25
30+
35-40
28

期望输出

xw
<2524.9
30+30.0
35-4035.0
2828.0

实现代码

利用PySpark的when/otherwise条件分支,结合正则提取、字符串拆分函数即可完成规则处理:

from pyspark.sql import SparkSession
from pyspark.sql.functions import when, regexp_extract, split, col

# 初始化SparkSession
spark = SparkSession.builder.appName("GenerateColumnW").getOrCreate()

# 构造示例DataFrame
data = [("<25",), ("30+",), ("35-40",), ("28",)]
df = spark.createDataFrame(data, ["x"])

# 按规则生成新列w
df_with_w = df.withColumn(
    "w",
    # 处理包含<的情况:提取数字后减0.1
    when(col("x").contains("<"), 
         regexp_extract(col("x"), r"(\d+)", 1).cast("double") - 0.1)
    # 处理包含+的情况:提取数字保留原数值
    .when(col("x").contains("+"), 
         regexp_extract(col("x"), r"(\d+)", 1).cast("double"))
    # 处理范围格式:拆分后取第一个数字
    .when(col("x").contains("-"), 
         split(col("x"), "-")[0].cast("double"))
    # 处理纯数字的默认情况
    .otherwise(col("x").cast("double"))
)

# 查看结果
df_with_w.show()

代码说明

  1. 正则提取逻辑:regexp_extract(col("x"), r"(\d+)", 1)用于从字符串中匹配并提取连续数字,\d+匹配一个或多个数字,第三个参数1表示取第一个捕获组的内容。
  2. 条件分支顺序:规则之间无重叠,按需求顺序编写when判断即可。
  3. 小数扩展支持:如果x列包含小数(如<25.5、30.2+),可将正则表达式改为(\d+\.?\d*),即可匹配整数与小数格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 08:20:43