Python Pandas根据另一个数据帧中2列的值筛选行
假设我们有两个dfs df1: df2: 输出df应包含所有df2行,其中“标题”以df1的“名称1”或“名称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
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 ... ...