You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas中高效查找跨分组的字符串包含关系

提升Pandas字符串包含匹配效率的方案

你的双重循环写法时间复杂度为O(n²),数据量稍大就会大幅拖慢运行速度,以下是几种更高效的实现思路:

方法一:利用向量化操作替代显式循环

借助Pandas的向量化特性,直接生成两两组合的条件矩阵,避免逐行遍历:

import pandas as pd

# 示例数据(替换为你的df5)
data = {
    'identifier': ['occupation', 'occupation', 'skill', 'department', 'skill'],
    'matched_string': ['manager', 'manager', 'manager', 'marketing manager', 'marketing']
}
df5 = pd.DataFrame(data)

# 提取核心列
str_series = df5['matched_string']
id_series = df5['identifier']

# 生成所有字符串两两包含的布尔矩阵
contains_matrix = str_series.apply(lambda x: str_series.str.contains(x))
# 生成标识符不同的布尔矩阵
diff_id_matrix = id_series.values != id_series.values[:, None]

# 合并两个条件:字符串包含且标识符不同
valid_matrix = contains_matrix & diff_id_matrix

# 获取所有符合条件的索引对
valid_indices = set()
for idx, row in valid_matrix.iterrows():
    # 找到当前行满足条件的其他行索引
    match_indices = row[row].index
    valid_indices.update([idx])
    valid_indices.update(match_indices)

# 提取结果并去重
df4 = df5.loc[list(valid_indices)].reset_index(drop=True)
print(df4)

方法二:先去重减少计算量

原数据存在重复记录(比如前两行的occupation+manager),可以先对唯一记录计算,再映射回原数据,进一步降低运算量:

# 第一步:获取唯一记录
unique_df = df5.drop_duplicates().reset_index(drop=True)
u_strs = unique_df['matched_string']
u_ids = unique_df['identifier']

# 生成条件矩阵
contains_matrix = u_strs.apply(lambda x: u_strs.str.contains(x))
diff_id_matrix = u_ids.values != u_ids.values[:, None]
valid_matrix = contains_matrix & diff_id_matrix

# 收集唯一记录中符合条件的行
valid_unique_indices = set()
for idx, row in valid_matrix.iterrows():
    match_indices = row[row].index
    valid_unique_indices.update([idx])
    valid_unique_indices.update(match_indices)
unique_result = unique_df.loc[list(valid_unique_indices)]

# 第二步:映射回原数据,获取所有原始符合条件的记录
df4 = df5.merge(unique_result, on=['identifier', 'matched_string'])
print(df4)

关键优化点

  • 用Pandas内置的向量化运算替代Python层面的双重循环,充分利用底层C实现的高效性
  • 去重步骤减少了需要计算的两两组合数,数据重复率越高,效率提升越明显
  • 通过集合存储索引避免重复添加记录,保证结果简洁

内容的提问来源于stack exchange,提问作者julez8000

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 02:20:28