如何在两个Pandas DataFrame中查找部分单词匹配?
Pandas实现跨DataFrame单词匹配筛选与统计
实现步骤
- 提取df1的所有单词集合
先把df1中所有描述里的单词提取出来,转成集合(去重且查找效率更高):
import pandas as pd # 示例数据 df1 = pd.DataFrame({'Description': ['i had lunch', 'going to the airport', 'buying a suitcase']}) df2 = pd.DataFrame({'Description': ['buying lunch', 'airport travel', 'owning a car']}) # 提取df1所有单词并去重 df1_words = set() for desc in df1['Description']: df1_words.update(desc.split())
- 筛选df2中符合条件的行
检查df2每行描述是否包含df1中的任意单词,筛选出匹配的行:
# 定义检查函数 def has_target_word(desc): return any(word in df1_words for word in desc.split()) # 执行筛选 filtered_df2 = df2[df2['Description'].apply(has_target_word)]
- 统计匹配行数
直接通过长度统计:
match_row_count = len(filtered_df2)
运行结果
筛选后的filtered_df2输出:
Description 0 buying lunch 1 airport travel
匹配行数match_row_count为2。
简洁优化写法(正则匹配)
如果需要更简洁的代码,且想避免部分单词匹配(比如防止"airport"误匹配"airporttest"),可以用正则表达式的单词边界:
# 生成正则匹配模式 pattern = r'\b(' + '|'.join(df1_words) + r')\b' # 执行筛选(case=False表示不区分大小写,按需关闭) filtered_df2 = df2[df2['Description'].str.contains(pattern, case=False)]
内容的提问来源于stack exchange,提问作者DN1
相关产品推荐
相关产品推荐

