如何基于另一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和你需要的目标格式完全一致:
| Name | Set1 | Set2 | Set3 |
|---|---|---|---|
| cat | 11 | 13 | 12 |
| dog | 3 | 12 | 6 |
| fish | 7 | 9 | 3 |
补充说明
- 用
dict.get()取值是为了兼容df1中出现df2未收录Term的场景,未匹配到的Term默认Freq为0,不会抛出报错 - 如果需要保留原始Set列的内容,不要直接覆盖原列,新增列存储求和结果即可
内容的提问来源于stack exchange,提问作者user2110417
相关产品推荐
相关产品推荐

