我正在嘗試比較不同資料幀中存在的兩列的值,以根據條件的匹配創建一個新的資料幀:
df1=
| id |
| -- |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
df2 =
| id |
| -- |
| 2 |
| 5 |
| 1 |
所以,當df2的欄位存在于df1的欄位中時,我想在is_used欄位中添加一個'x',否則添加'NA',以生成這樣的結果資料幀:
df3 =
| id | is_used |
| -- | ------- |
| 1 | X |
| 2 | X |
| 3 | NA |
| 4 | NA |
| 5 | X |
我已經嘗試過這種方式,但選擇標準在所有列中放置了一個“X”:
df3 = df3.withColumn('is_used', F.when(
condition = (F.arrays_overlap(F.array(df1.id), F.array(df2.id))) == False,
value = 'NA'
).otherwise('X'))
我將不勝感激任何幫助
uj5u.com熱心網友回復:
嘗試fullouter加入:
df3 = (
df1.join(df2.alias("df2"), df1.id == df2.id, "fullouter")
.withColumn(
"is_used",
F.when(F.col("df2.id").isNotNull(), F.lit("X")).otherwise(F.lit("NA")),
)
.drop(F.col("df2.id"))
.orderBy(F.col("id"))
)
結果:
--- -------
|id |is_used|
--- -------
|1 |X |
|2 |X |
|3 |NA |
|4 |NA |
|5 |X |
--- -------
uj5u.com熱心網友回復:
試試下面的代碼,它會給你一個類似的結果,你可以進行其余的更改:
df3 = df1.alias("df1").\
join(df2.alias("df2"), (df1.id==df2.id), how='left').\
withColumn('is_true', F.when(df1.id == df2.id,F.lit("X")).otherwise(F.lit("NA"))).\
select("df1.*","is_true")
df3.show()
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/360293.html
上一篇:將PythonPandasDataframe轉換為嵌套的JSON格式
下一篇:插入帶有細節的列
