как соединить два кадра данных и вычесть два столбца из кадра данных - PullRequest
1 голос
/ 11 февраля 2020

У меня есть два кадра данных, которые выглядят так, как показано ниже. Я пытаюсь найти разницу между двумя значениями на основе идентификатора

Кадр данных 1:

ID  I Amt
1   null 200
null   2 200
3   null 600

dataframe 2

ID I  Amt
2  null  300
3  null  400

Output
Df
ID Amt(df2-df1)
2  100
3  -200

Запрос не работает: вычитание не работает

df = df1.join(df2, df1["coalesce(ID, I)"] == df2["coalesce(ID, I)"], 'inner').select
((df1["amt)"]) – (df2["amt”])), df1["coalesce(ID, I)"].show())

1 Ответ

0 голосов
/ 11 февраля 2020

Я бы сделал пару вещей по-другому. Чтобы было легче узнать, какой столбец находится в каком фрейме данных, я бы переименовал их. Я также сделал бы объединение вне самого объединения.

val joined = df1.withColumn("joinKey",coalesce($"ID",$"I")).select($"joinKey",$"Amt".alias("DF1_AMT")).join(
df2.withColumn("joinKey",coalesce($"ID",$"I")).select($"joinKey",$"Amt".alias("DF2_AMT")),"joinKey")

Тогда вы можете легко выполнить свой расчет:

joined.withColumn("DIFF",$"DF2_AMT" - $"DF1_AMT").show
+-------+-------+-------+------+
|joinKey|DF1_AMT|DF2_AMT|  DIFF|
+-------+-------+-------+------+
|      2|    200|    300| 100.0|
|      3|    600|    400|-200.0|
+-------+-------+-------+------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...