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

如何基于列前两位字符匹配两个DataFrame的列?求高效方案

高效实现两个DataFrame按列前两位字符配对

问题描述

需要将两个DataFrame的列进行配对,匹配规则为当df1的col1字段前两位字符与df2的col2字段前两位字符相同时,视为匹配。

示例数据

import pandas as pd

# df1数据
df1 = pd.DataFrame({
    'col1': ["'summer'", "'good heather'", "'sooner come'", "'keep up great work'", "'really'"]
})

# df2数据
df2 = pd.DataFrame({
    'col2': ["'nice to be'", "'good'", "'remember'", "'recall me'"]
})

期望输出

col1          col2
0  'good heather'     'good'
1        'really'    'remember'
2        'really'    'recall me'

由于处理的是大规模数据集,需要高效的实现方法。

高效解决方案

方法一:字典映射法(最优大规模数据场景)

该方法通过预处理构建前缀映射字典,避免生成笛卡尔积式的中间结果,大幅降低内存占用和时间消耗,时间复杂度为O(M+N)(M、N分别为df2、df1的行数)。

from collections import defaultdict
import pandas as pd

# 预处理df2:构建前缀到col2值的映射字典
prefix_map = defaultdict(list)
for val in df2['col2']:
    # 提取前两位字符作为匹配键
    prefix = val[:2]
    prefix_map[prefix].append(val)

# 遍历df1生成所有匹配对
matches = []
for col1_val in df1['col1']:
    prefix = col1_val[:2]
    if prefix in prefix_map:
        # 遍历对应前缀的所有col2值,生成配对
        for col2_val in prefix_map[prefix]:
            matches.append({'col1': col1_val, 'col2': col2_val})

# 转换为结果DataFrame
result_df = pd.DataFrame(matches)
print(result_df)

方法二:Pandas Merge法(适合中小规模数据)

如果数据规模适中,可以用Pandas的merge方法快速实现,但要注意当重复前缀较多时,会生成大量中间匹配行,内存占用较高。

import pandas as pd

# 向量化提取前缀列
df1['prefix'] = df1['col1'].str[:2]
df2['prefix'] = df2['col2'].str[:2]

# 按前缀合并,得到所有匹配对
result_df = df1.merge(df2, on='prefix', how='inner').drop(columns='prefix')
print(result_df)

方案对比

  • 字典映射法:适合超大规模数据集,逐行处理无需加载全量中间结果,内存友好,时间效率高。
  • Merge法:代码简洁,适合中小规模数据,但重复前缀较多时内存压力大。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 18:24:31