如何基于第三方列映射表实现两个DataFrame的对应列相减
解决方案
核心思路是利用映射表重命名DataFrame A的列,直接和DataFrame B做向量化减法,完全不需要循环,代码简洁的同时执行效率也更高。
完整可运行代码示例:
import pandas as pd # 样例数据构造 a = pd.DataFrame({ 'date': ['12/31/2019', '12/31/2020'], 'A': [0.1, 0.3], 'B': [0.4, 0.6] }) b = pd.DataFrame({ 'date': ['12/31/2019', '12/31/2020'], 'x1': [1.0, 0.4], 'x2': [0.8, 0.7], 'x3': [1.0, 1.5] }) c = pd.DataFrame({ 'From': ['x1', 'x2', 'x3'], 'To': ['B', 'A', 'A'] }) # 核心运算逻辑 # 1. 将映射表转为字典 col_map = dict(zip(c['From'], c['To'])) # 2. 按date对齐两个表,重命名a的列和b匹配后直接做减法 result = b.set_index('date') - a.set_index('date').rename(columns={v:k for k,v in col_map.items()}) # 恢复date为普通列 result = result.reset_index() print(result)
运行输出的结果和你预期的完全一致:
date x1 x2 x3 0 12/31/2019 0.6 0.7 0.9 1 12/31/2020 -0.2 0.4 1.2
如果两个表的date不是完全对齐的,你可以先通过merge操作对齐日期后再执行上述运算,逻辑是通用的。
内容的提问来源于stack exchange,提问作者Gal
相关产品推荐
相关产品推荐

