Python Pandas根据另一个数据帧中2列的值筛选行

Python Pandas根据另一个数据帧中2列的值筛选行,python,pandas,Python,Pandas,假设我们有两个dfs df1: df2: 输出df应包含所有df2行,其中“标题”以df1的“名称1”或“名称2”开头 Title Col1 Col2 0 aaaLKJ ... ... 2 dddKJH ... ... 3 ooo123 ... ... 4 aaa098 ... ... 请让我知道如何做到这一点。我用df.loc、isin、str.co

假设我们有两个dfs

df1:

df2:

输出df应包含所有df2行,其中“标题”以df1的“名称1”或“名称2”开头

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

请让我知道如何做到这一点。我用df.loc、isin、str.contains尝试了几种方法,但运气不好……

你可以用
df1
中两列的所有名称建立一个列表,并在
df2
中的
Title
上使用
上的
序列.str.startswith
,它也可以使用字符串的
元组,要查找以
名称中的任何术语开头的名称

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

答案有用吗?别忘了你可以投票并接受答案。看,谢谢!
        Title     Col1     Col2
    0   aaaLKJ    ...      ...
    2   dddKJH    ...      ...
    3   ooo123    ...      ...
    4   aaa098    ...      ...
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  ...  ...