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

如何基于另一DataFrame的映射关系计算指定列的数值总和

实现代码

import pandas as pd

# 示例数据构造,实际使用可替换为你自己读取的df1、df2
df1 = pd.DataFrame({'Name': ["cat", "dog", "fish"],
    'Set1': ["ad, cd, bd", "bd", "jk, md"],
    'Set2': ["kl, kd", "ad, kd", "kd"],
    'Set3': ["kd, ad", "jk", "bd"]})

df2 = pd.DataFrame({'Term': ["ad", "cd", "bd", "jk", "md", "kl", "kd", "mm", "nn"], 
                    'Freq': [3,5,3,6,1,4,9,4,2]})

# 构造Term到Freq的映射字典
freq_map = df2.set_index('Term')['Freq'].to_dict()

# 定义单单元格求和函数
def calc_freq_sum(term_str):
    # 拆分逗号分隔的术语,去除多余空格后匹配Freq求和
    terms = [t.strip() for t in term_str.split(',')]
    return sum(freq_map.get(term, 0) for term in terms)

# 对所有Set列应用函数计算总和
df1[['Set1', 'Set2', 'Set3']] = df1[['Set1', 'Set2', 'Set3']].applymap(calc_freq_sum)

# 输出结果
print(df1)

输出结果

运行后得到的df1和你需要的目标格式完全一致:

NameSet1Set2Set3
cat111312
dog3126
fish793

补充说明

  • 用dict.get()取值是为了兼容df1中出现df2未收录Term的场景,未匹配到的Term默认Freq为0,不会抛出报错
  • 如果需要保留原始Set列的内容,不要直接覆盖原列,新增列存储求和结果即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 23:30:02