Присоединение к фреймам данных с той же последней буквой как условие - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть 2 кадра данных, к которым я хочу присоединиться.

product_no  code
12          aj
12          mn
13          aj

p_no       cde
12         *j
12         mn
13         *j

Result
product_no  code    p_no       cde
12          aj      12         *j
12          mn      12         mn
13          aj      12         *j

Я хочу сопоставить все коды, которые заканчиваются на j с *j, как мне это сделать? Я знаю, что я должен присоединиться, где product_no === p_no, но как мне присоединиться, где, если последняя буква кода j, то присоединиться к *j?

EDIT

В настоящее время мы присоединяемся product_no, и нам необходимо соответствующим образом соединить коды в первом кадре данных с кодами во втором кадре.

Данные для второго кадра данных содержат только 3 значения для столбца code: 2 letters, *j, or ** Условия для объединения следующие:

  1. Если, например, фактический код mn существует во втором кадре данных, мы присоединяемся.
  2. Если фактический код находится не во втором кадре данных, то мы проверяем, заканчивается ли код в первом на j, если это так, то мы присоединяемся, где cde равно *j
  3. Если фактический код не заканчивается на j ИЛИ, если мы не можем найти *j в соответствующем кадре данных, тогда мы присоединяемся к **

1 Ответ

0 голосов
/ 08 ноября 2018

Не ясно, что именно вы пытаетесь сделать. Но если вы хотите объединить фреймы данных при условии [последний символ столбца] = * [последний символ столбца], вы можете использовать функцию substring следующим образом:

df1.join(df2, concat(lit("*"), substring(df1.col("code"),-1,1)) === df2.col("cde"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...