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

Pandas转PySpark:SDD.loc[DFF.index, 'RDD']代码逻辑解析求助

Pandas代码解析与PySpark等效实现

一、原Pandas代码逻辑解析

SDD.loc[DFF.index, 'RDD'] = SDD.loc[DFF.index, 'DlvDate'] 的核心逻辑如下:

  1. 匹配行筛选:以DFF的MultiIndex(SalesOrder、SOItem、SLNo三个字段的唯一组合)为匹配条件,从SDD中找出所有索引与该MultiIndex完全匹配的行。
  2. 列值更新:对筛选出的这些行,将它们的DlvDate列值直接赋值给RDD列;SDD中不在DFF索引范围内的行,RDD列保持原有值不变。

注:这里隐含前提:SDD的行索引结构与DFF的MultiIndex完全一致(即SDD的索引也是SalesOrder+SOItem+SLNo的组合),否则Pandas会自动尝试将MultiIndex的三个字段作为行匹配键进行筛选。

二、PySpark等效实现

PySpark没有MultiIndex概念,我们将DFF的三个索引字段作为关联键实现相同逻辑,分两种场景:

场景1:仅保留SDD中与DFF匹配的行并更新

如果只需要处理SDD中匹配DFF的行(不保留不匹配的行),用内关联+列赋值:

from pyspark.sql import functions as F

# 从DFF中提取唯一的索引键组合
dff_unique_keys = DFF.select("SalesOrder", "SOItem", "SLNo").distinct()

# 内关联匹配行,更新RDD列
updated_sdd = SDD.join(dff_unique_keys, on=["SalesOrder", "SOItem", "SLNo"], how="inner") \
                 .withColumn("RDD", F.col("DlvDate"))

场景2:保留SDD所有行,仅更新匹配的行

如果需要保留SDD全部行,仅对匹配DFF的行更新RDD列(完全对应原Pandas逻辑),用左关联+条件赋值:

from pyspark.sql import functions as F

# 从DFF中提取唯一的索引键组合
dff_unique_keys = DFF.select("SalesOrder", "SOItem", "SLNo").distinct()

# 左关联后,仅对匹配到的行更新RDD列,其余行保持原RDD值
updated_sdd = SDD.join(dff_unique_keys, on=["SalesOrder", "SOItem", "SLNo"], how="left") \
                 .withColumn(
                     "RDD",
                     F.when(F.col("SalesOrder").isNotNull(), F.col("DlvDate")).otherwise(F.col("RDD"))
                 ) \
                 .drop("SalesOrder", "SOItem", "SLNo")  # 移除关联带来的重复列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 10:55:23