【问题标题】:Finding matching records in two datasets per unique value in another column根据另一列中的唯一值在两个数据集中查找匹配记录
【发布时间】:2022-08-19 00:56:05
【问题描述】:
dataset_a =

zid   code   number
a1    abc    4.568
a2    adc    4.368
a3    asc    4.566
a4    bde    5.568
a5    ghi    7.969
a6    gji    7.475

dataset_b =

col   code   series
55    abc         1
22    adc         1
44    asc         2
11    asv         2
66    bde         3
77    trd         4
88    ghi         5
89    gji         5
90    gpi         5

我想看看每个系列的两个数据集中存在的所有代码.所以想要的输出是:

code   series
abc         1
adc         1
bde         3

我做了一个左连接,代码asc 也被考虑在内,但由于2 系列的codes 并非都存在于df_1 中,我只想忽略它。系列5 的相同故事。

我可以groupBy 然后join 吗?

  • 请提供足够的代码,以便其他人可以更好地理解或重现该问题。

标签: python dataframe join pyspark


【解决方案1】:

您可以执行 2 个连接来标记需要保留的行:

df = dataset_b.join(
    dataset_a.select("code").distinct().withColumn("exists", F.lit(1)),
    on="code",
    how="left",
).fillna(0)

df_keep = df.groupBy("series").agg((F.count("exists") == F.sum("exists")).alias("keep"))

dataset_b.join(df_keep, on="series", how="left").where(F.col("keep") == True).select(
    "code", "series"
).show()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-01
    • 2023-02-04
    • 2021-01-08
    • 1970-01-01
    • 1970-01-01
    • 2020-03-29
    • 2021-05-06
    相关资源
    最近更新 更多