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

如何高效匹配两个DataFrame字符串并生成对应名称列?

高效匹配Pandas DataFrame关键词的解决方案

问题说明

现有两个Pandas DataFrame:

  • DataFrame 1:包含ID和Paragraph列,其中Paragraph是由多个单词组成的字符串。
  • DataFrame 2:包含ID、Name和Words列,Words是字符串列表,Name是对应单词组的标识。

需求:为DataFrame 1添加新列Names,该列存储所有满足「Words中至少一个单词出现在对应Paragraph」的Name,要求无重复、顺序无关。

高效解决方案

方法一:展开关键词后聚合匹配

此方法通过展开关键词列,利用Pandas的内置合并与聚合操作实现,适合大数据量场景,避免Python层面的嵌套循环。

import pandas as pd

# 初始化测试数据
data_1 = {'Paragraph': ['A B C D E', 'A F G H L', 'B J P Q W', 'G F D S A']}
df_1 = pd.DataFrame(data_1)
df_1['ID'] = df_1.index + 1  # 补充ID列

data_2 = {'Name': ['First', 'Second', 'Third', 'Fourth'],
          'Words': [['A', 'F'], ['B', 'Z'], ['P', 'Q'], ['H', 'J']]}
df_2 = pd.DataFrame(data_2)

# 展开df2的Words列,每个单词对应一个Name
df2_exploded = df_2.explode('Words')

# 展开df1的Paragraph为单个单词,保留关联ID和原段落
df1_exploded = df_1.assign(Word=df_1['Paragraph'].str.split()).explode('Word')

# 匹配单词并按ID聚合,去重后生成Name列表
matched = df1_exploded.merge(df2_exploded, left_on='Word', right_on='Words', how='left')
result = matched.groupby('ID').agg(
    Paragraph=('Paragraph', 'first'),
    Names=('Name', lambda x: list(pd.unique(x.dropna())))
).reset_index()

print(result)

方法二:集合交集的向量化操作

此方法利用集合的快速交集运算,代码简洁直观,适合中小数据量场景,效率远高于嵌套循环。

import pandas as pd

# 初始化测试数据
data_1 = {'Paragraph': ['A B C D E', 'A F G H L', 'B J P Q W', 'G F D S A']}
df_1 = pd.DataFrame(data_1)
df_1['ID'] = df_1.index + 1  # 补充ID列

data_2 = {'Name': ['First', 'Second', 'Third', 'Fourth'],
          'Words': [['A', 'F'], ['B', 'Z'], ['P', 'Q'], ['H', 'J']]}
df_2 = pd.DataFrame(data_2)

# 预存df2中每个Name对应的单词集合
name_word_pairs = [(row['Name'], set(row['Words'])) for _, row in df_2.iterrows()]

# 对每个Paragraph的单词集合,筛选出有交集的Name
df_1['Names'] = df_1['Paragraph'].str.split().apply(set).apply(
    lambda para_set: [name for name, word_set in name_word_pairs if para_set & word_set]
)

# 调整列顺序
df_1 = df_1[['ID', 'Paragraph', 'Names']]
print(df_1)

输出结果

两种方法均会生成符合要求的结果:

ID    Paragraph                     Names
0   1  A B C D E           [First, Second]
1   2  A F G H L           [First, Fourth]
2   3  B J P Q W  [Second, Third, Fourth]
3   4  G F D S A                 [First]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 16:55:31