Pandas фильтрует строки на основе значений из 2 столбцов в другом фрейме данных

#python #pandas

#python #pandas

Вопрос:

Предположим, у нас есть 2 dfs.

df1:

         Product   Name1    Name2
    0   ABC       aaa      bbb
    1   ASD       sss      ddd
    2   ZCX       xxx      NaN
    3   QWE       qqq      NaN
    4   IOP       iii      ooo
  

df2:

         Title     Col1     Col2
    0   aaaLKJ    ...      ...
    1   zzzMNB    ...      ...
    2   dddKJH    ...      ...
    3   ooo123    ...      ...
    4   aaa098    ...      ...
    5   ttt676    ...      ...
  

Выходной df должен состоять из всех строк df2, в которых ‘Title’ начинается либо с ‘Name1’, либо с ‘Name2’ df1.

         Title     Col1     Col2
    0   aaaLKJ    ...      ...
    2   dddKJH    ...      ...
    3   ooo123    ...      ...
    4   aaa098    ...      ...
  

Пожалуйста, дайте мне знать, как этого можно достичь. Я пробовал несколько способов с df.loc, isin, str.contains, но безуспешно…

Ответ №1:

Вы могли бы создать список со всеми именами из обоих столбцов в df1 и использовать Series.str.startswith on Title в df2 , который также работает с tuple строками, чтобы найти те, которые начинаются с любого термина в names :

 names = df1.filter(like='Name').stack().to_numpy()
# array(['aaa', 'bbb', 'sss', 'ddd', 'xxx', 'qqq', 'iii', 'ooo'], dtype=object)
df2 = df2[df2.Title.str.startswith(tuple(names))]

print(df2)
    Title Col1 Col2
0  aaaLKJ  ...  ...
2  dddKJH  ...  ...
3  ooo123  ...  ...
4  aaa098  ...  ...