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

在两个DataFrame中搜索语句并提取关联页码的技术问询

嘿,我来帮你完成这个句子匹配页码的需求!你之前尝试了双重循环的思路,我给你补全并优化两种可行的实现方案,分别适合不同的场景:

先准备示例数据

首先我们先把你描述的两个DataFrame用代码还原出来,方便测试:

import pandas as pd

# 你的单列句子DataFrame
df = pd.DataFrame({'sentence': ['sentence1', 'sentence2', 'sentence3', 'sentence4']})

# 你的段落+页码DataFrame(模拟句子1在para1里,句子3在para2里)
df_pages = pd.DataFrame({
    'paragraph': ['This is para1 containing sentence1', 'This is para2 with sentence3'],
    'pagenumber': ['pg1', 'pg2']
})

方法1:直观的双重循环(适合小数据集)

这个方法和你最初的思路完全衔接,逻辑简单易懂,适合数据量不大的情况:

# 初始化列表存储每个句子对应的页码
matched_pages = []

# 遍历df里的每一个句子
for sentence in df['sentence']:
    page = None  # 默认没找到时设为None,你也可以改成'未找到'之类的默认值
    # 遍历df_pages的每一行段落和页码
    for _, row in df_pages.iterrows():
        # 检查句子是否在当前段落中
        if sentence in row['paragraph']:
            page = row['pagenumber']
            break  # 找到匹配就跳出循环,不用继续检查其他段落了
    matched_pages.append(page)

# 把匹配结果加到原df中
df['matched_pagenumber'] = matched_pages

运行后df会新增一列matched_pagenumber,对应每个句子的匹配页码,没找到的会显示None。

方法2:高效的矢量化操作(推荐大数据集)

如果你的df_pages数据量很大,双重循环会很慢,这时候用pandas的矢量化方法会高效很多:

# 定义一个函数:输入句子,返回对应的页码
def find_matching_page(sentence):
    # 筛选出包含该句子的段落行(regex=False避免句子里的特殊字符被当成正则)
    matches = df_pages[df_pages['paragraph'].str.contains(sentence, regex=False, case=False)]
    # 如果有匹配结果,返回第一个页码;没有则返回None
    return matches['pagenumber'].iloc[0] if not matches.empty else None

# 把函数应用到df的每个句子上
df['matched_pagenumber'] = df['sentence'].apply(find_matching_page)

这里的str.contains是pandas内置的向量化字符串方法,比手动循环快得多。参数case=False是忽略大小写匹配,如果你需要严格区分大小写,可以去掉这个参数;regex=False是确保句子里的特殊字符(比如.、*)不会被当成正则表达式处理,保证精确匹配。

额外小提示

  • 如果一个句子在多个段落中出现,上面的方法只会返回第一个匹配的页码。如果你需要所有匹配的页码,可以把返回值改成','.join(matches['pagenumber']),这样会用逗号分隔所有匹配的页码。
  • 如果你需要更严格的匹配(比如句子是段落里的独立完整句子,而不是子串),可以调整匹配逻辑,比如用正则匹配完整句子边界:str.contains(r'\b' + re.escape(sentence) + r'\b', case=False),记得先导入re模块。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:54:18