#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 ... ...