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

如何连接两个DataFrame获取全部行并生成符合规则的ClicksPerDay列

实现方案

你可以通过两个DataFrame的全外连接完成需求,具体实现逻辑如下:

  1. 先将第二个DataFrame的Clicks列重命名为目标列名ClicksPerDay
  2. 以Location、Places作为关联键,对两个DataFrame执行全外连接,保证两边的所有行都保留
  3. 补全缺失的公共字段值:从你给出的示例来看,所有行的Date、Date_part统一为7/1/2021,第二个表中独有的行默认Sector=Cars、Category=Passenger
  4. 按需求调整ClicksPerDay的显示规则:仅当Sector=Cars且Category=Passenger时保留值,其余情况置为空

PySpark 代码示例

from pyspark.sql import functions as F

# 重命名列
df2_renamed = df2.withColumnRenamed("Clicks", "ClicksPerDay")
# 全外连接两个表
df_join = df1.join(df2_renamed, on=["Location", "Places"], how="outer")
# 补全缺失的字段值
df_filled = df_join \
    .withColumn("Date", F.coalesce(F.col("Date"), F.lit("7/1/2021"))) \
    .withColumn("Date_part", F.coalesce(F.col("Date_part"), F.lit("7/1/2021"))) \
    .withColumn("Sector", F.coalesce(F.col("Sector"), F.lit("Cars"))) \
    .withColumn("Category", F.coalesce(F.col("Category"), F.lit("Passenger")))
# 按规则调整ClicksPerDay的显示
df_result = df_filled.withColumn("ClicksPerDay",
    F.when((F.col("Sector") == "Cars") & (F.col("Category") == "Passenger"), F.col("ClicksPerDay"))
     .otherwise(None)
)

Pandas 代码示例

逻辑和PySpark完全一致,替换对应API即可:

import pandas as pd

# 重命名列
df2_renamed = df2.rename(columns={"Clicks": "ClicksPerDay"})
# 全外连接
df_join = pd.merge(df1, df2_renamed, on=["Location", "Places"], how="outer")
# 补全缺失值
df_join["Date"] = df_join["Date"].fillna("7/1/2021")
df_join["Date_part"] = df_join["Date_part"].fillna("7/1/2021")
df_join["Sector"] = df_join["Sector"].fillna("Cars")
df_join["Category"] = df_join["Category"].fillna("Passenger")
# 调整ClicksPerDay显示规则
df_join["ClicksPerDay"] = df_join["ClicksPerDay"].where(
    (df_join["Sector"] == "Cars") & (df_join["Category"] == "Passenger")
)

注:如果你需要保留示例中COL行(Sector=Trucks)的ClicksPerDay值,只需调整第四步的条件判断逻辑即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 05:24:02