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

Pandas两个DataFrame按列匹配后对应频率值相减的实现方法

原有代码错误分析

你的嵌套循环写法存在几个核心问题:

  • 循环中拿到的i、j是Letter列的取值(如A、B),不是行索引,无法直接作为下标取对应行的FREQ值
  • 列名引用错误,示例数据中列名为FREQ、Diff,不是代码里的Frequency、Difference
  • 误将判断相等的==用作赋值运算符,实际赋值应该用=
  • 嵌套循环的时间复杂度为O(n*m),数据量稍大时性能极差,pandas内置的向量化操作可以更高效实现需求

正确实现方案

方案1:映射匹配法(最简单高效,适合当前场景)

先把df2转为Letter到FREQ的映射字典,再直接批量计算Diff列:

# 构造Letter对应FREQ的映射字典
freq_map = df2.set_index('Letter')['FREQ'].to_dict()
# 匹配计算:无匹配的填充0,减0即等于原值,符合需求
df1['Diff'] = df1['FREQ'] - df1['Letter'].map(freq_map).fillna(0)

执行后即可得到你预期的df1结果。

方案2:merge关联法(适合更复杂的多字段匹配场景)

如果后续匹配逻辑变复杂,可以用左连接的方式实现:

# 左连接保留df1所有行,关联匹配df2的FREQ
merge_df = df1.merge(df2, on='Letter', how='left', suffixes=('', '_df2'))
# 计算Diff,无匹配的填充0
df1['Diff'] = merge_df['FREQ'] - merge_df['FREQ_df2'].fillna(0)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 19:36:02