Pandas如何对比DataFrame两列字符串并将匹配单词合并为短语
Pandas双列字符串匹配处理方案
核心逻辑
逐行处理数据,步骤如下:
- 遍历每行
para列的双词短语,检查短语的两个组成单词是否都存在于当前行words列的单词列表中 - 匹配成功的短语存入
result1,同时将两个组成单词从当前行可用单词池中移除,该短语标记为已使用 - 所有短语匹配完成后,剩余未匹配的单词存入
result1 - 将
para列中所有未标记为已使用的短语存入result2
完整实现代码
import pandas as pd # 构造示例DataFrame list1 = [['good', 'hello', 'morning',],['sit', 'good', 'down'],['get', 'who', 'down']] list2 = [['good morning', 'good afternoon'],['sit down', 'rise up', 'good work'], ['sit here', 'get job', 'get down']] df_new = pd.DataFrame({'words': list1}) df_new['para'] = list2 # 定义行处理函数 def process_row(row): available_words = row['words'].copy() para_list = row['para'] used_phrases = [] result1 = [] # 匹配符合要求的短语 for phrase in para_list: # 拆分双词短语 w1, w2 = phrase.split() if w1 in available_words and w2 in available_words: result1.append(phrase) used_phrases.append(phrase) # 从可用词中移除已匹配的两个单词 available_words.remove(w1) available_words.remove(w2) # 加入剩余未匹配的单词 result1.extend(available_words) # 生成result2:未被使用的短语 result2 = [p for p in para_list if p not in used_phrases] return pd.Series([result1, result2]) # 应用函数生成新列 df_new[['result1', 'result2']] = df_new.apply(process_row, axis=1) # 查看结果 print(df_new)
输出验证
运行上述代码后,df_new的result1和result2列将和给出的预期输出完全一致。
内容的提问来源于stack exchange,提问作者Mark J.
相关产品推荐
相关产品推荐

