如何批量计算两个DataFrame同类指标差值并在df1新增列?
嘿,这个场景我熟!不用手动逐个写计算逻辑的话,有两种高效的实现方式,完全适配你的需求,一起来看看:
方法1:列名对齐批量计算(简洁高效)
这个方法核心是先把df2的列名和df1对齐,然后批量计算差值,最后合并回原DataFrame,代码量极少:
import pandas as pd import numpy as np # 生成示例数据(和你提供的一致) df1 = pd.DataFrame(np.random.randint(0,100,size=(15, 2)), columns=['MetricA', 'MetricB']) df2 = pd.DataFrame(np.random.randint(0,100,size=(15, 2)), columns=['MetricA1', 'MetricB1']) # 步骤1:重命名df2的列,去掉末尾的"1",和df1的列名一一对应 df2_renamed = df2.rename(columns=lambda col_name: col_name[:-1]) # 步骤2:批量计算差值,自动生成所有对应列的结果 delta_df = df1 - df2_renamed # 步骤3:给差值列重命名成你想要的格式(比如DeltaMetricAAndA1) delta_df.columns = [f'Delta{col}And{col}1' for col in delta_df.columns] # 步骤4:把差值列合并到df1中 df1 = pd.concat([df1, delta_df], axis=1)
方法2:循环匹配列名(灵活可控)
如果你的列名对应规则偶尔有变动,或者需要加额外判断,循环匹配的方式更灵活:
import pandas as pd import numpy as np # 生成示例数据 df1 = pd.DataFrame(np.random.randint(0,100,size=(15, 2)), columns=['MetricA', 'MetricB']) df2 = pd.DataFrame(np.random.randint(0,100,size=(15, 2)), columns=['MetricA1', 'MetricB1']) # 遍历df1的每一列,自动匹配df2中对应的"列名+1"列,计算差值 for col in df1.columns: # 构造df2中对应的列名 matching_col = f"{col}1" # 检查该列是否存在于df2中,避免报错 if matching_col in df2.columns: # 新增差值列,命名符合你的要求 df1[f'Delta{col}And{matching_col}'] = df1[col] - df2[matching_col]
两种方法对比
- 方法1更简洁,适合列名对应规则非常固定(都是原列名加1)的场景,一行代码就能完成所有差值计算
- 方法2更灵活,比如后续如果有非"列名+1"的对应关系,或者需要对某些列做特殊处理,直接在循环里加判断即可
注意事项
确保df1和df2的行数一致且索引对齐,如果索引不匹配,建议先执行df1.reset_index(drop=True)和df2.reset_index(drop=True)来统一索引,避免计算时出现NaN或者错位问题。
内容的提问来源于stack exchange,提问作者Dhimmel90
相关产品推荐
相关产品推荐

