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

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.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 14:54:03