Pandas如何实现两个DataFrame同列对应相除的可扩展运算
解决方案
针对列名完全一致的DataFrame逐列做对应值除法,直接使用pandas内置的矢量化运算即可,无额外循环、性能最优,可直接适配百万级以上的大型数据集。
首先构造测试数据:
import pandas as pd df_1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]}) df_2 = pd.DataFrame({'A': [3], 'B': [4]})
核心计算逻辑:
# 按列匹配做广播除法,自动对齐列名,矢量化底层实现 df_3 = df_1.div(df_2.iloc[0], axis="columns").round(2)
运行后得到的df_3和预期结果完全一致:
A B 0 0.33 0.75 1 0.67 1.00
注:示例中给出的0.66是2/3的截断近似值,运算默认返回四舍五入结果,可根据精度需求调整round的小数位数参数。
方案优势
- 性能极高:所有运算在pandas底层C层执行,没有Python层面的循环、逐列apply等开销,比手写遍历逻辑快数十倍,完全适配大型数据集场景
- 扩展性强:不需要手动枚举列名,只要两个DataFrame列名一致,不管有多少列都可以直接运行;如果后续需要两个同长度DataFrame逐行对应位置相除,只需要把代码改成
df_3 = df_1.div(df_2, axis="columns")即可,逻辑无需调整 - 鲁棒性好:运算自动按列名对齐,不受两个DataFrame列顺序不一致的影响,不会出现列匹配错误的问题
注意:如果两个DataFrame存在非共有列,运算结果中非共有列会返回空值,正式运算前可以通过
assert df_1.columns.equals(df_2.columns)做列一致性校验,避免异常结果。
内容的提问来源于stack exchange,提问作者Francisco Mello Castro
相关产品推荐
相关产品推荐

