如何提取双列均匹配另一DataFrame子串的DataFrame行
嘿,我来帮你搞定这个pandas筛选的需求!下面是具体的实现步骤和代码:
步骤1:初始化DataFrame
首先确保已经导入pandas库,然后把你给出的两个DataFrame创建出来(这里把int改成int_df啦,避免和Python内置的int类型冲突):
import pandas as pd int_df = pd.DataFrame({'domain1':['ABC.6','GF53.7','SDC78.12','GGH7T.64'], 'domain2': ['UI76.89','76TH3.2','YU1QW.45','BY76.12']}) doms = pd.DataFrame({'domains':['GF53','VB96','UI76','GGH7T','BY76','ABC','SDC78']})
步骤2:准备子串集合
把doms里的域名子串转成集合,这样后续检查子串是否存在的效率会更高:
domain_subs = set(doms['domains'])
步骤3:定义筛选逻辑
咱们需要判断每个单元格的字符串是否包含集合里的任意一个子串,用lambda表达式就能轻松实现:
has_valid_sub = lambda s: any(sub in s for sub in domain_subs)
步骤4:执行筛选
对int_df的domain1和domain2列分别应用上面的判断逻辑,只保留两列都满足条件的行:
result = int_df[int_df['domain1'].apply(has_valid_sub) & int_df['domain2'].apply(has_valid_sub)]
查看结果
运行代码后打印result,就能得到你想要的输出:
domain1 domain2 0 ABC.6 UI76.89 3 GGH7T.64 BY76.12
小提示
- 用集合而不是列表来存储子串,是因为集合的成员查找操作比列表快得多,数据量大的时候优势更明显。
- 变量名尽量避开Python的内置关键字/类型,比如原来的
int就容易引发潜在问题,换成int_df这类命名会更安全清晰。
内容的提问来源于stack exchange,提问作者Saad Zaheer
相关产品推荐
相关产品推荐

