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

如何高效按行列位置对两个Pandas DataFrame执行对应位置计算

实现方案

完全不需要用pd.merge,只要两个DataFrame的行索引、列名保持对应,直接用pandas原生向量化运算就可以实现,效率比merge高很多,也不会出现合并后列名冲突、数据错位的问题。

核心实现逻辑

pandas的DataFrame做算术运算时,默认会自动按行索引、列名对齐对应位置的值,直接套用计算公式写代码即可:

import pandas as pd
import numpy as np

# 先把df2调整为和df1完全一致的行列结构,避免顺序错乱导致计算错误
df2_aligned = df2.reindex_like(df1)
# 按基准公式计算百分比差值
df_master = (df1 - df2_aligned) / df1

示例验证

用给出的样例数据跑上述代码:

# 构造样例df1
df1 = pd.DataFrame(
    [[1.0, 0.55, 0.35], [1.0, 0.40, 0.20]],
    columns=[0,1,2]
)
df1.index.name = "period_number"

# 构造样例df2
df2 = pd.DataFrame(
    [[1.0, 0.30, 0], [1.0, 0.20, 0]],
    columns=[0,1,2]
)
df2.index.name = "period_number"

# 执行计算
df2_aligned = df2.reindex_like(df1)
df_master = (df1 - df2_aligned) / df1

输出的df_master结果和预期完全匹配:

period_number012
00.00.4545...1.0
10.00.51.0

注意事项

  • 如果df1中存在0值,计算时会产生inf(无穷大)的无效结果,可以加一步替换处理:df_master = df_master.replace([np.inf, -np.inf], np.nan)
  • 不要用merge处理这类场景:merge是按关联键做表连接,会自动给重名列加后缀,后续还要手动逐列匹配计算,不仅代码冗余,遇到重复关联键时还容易出现数据膨胀的问题,完全不适配行列一一对应的计算需求。
  • 如果两个df的索引不是默认的位置索引,只要索引值和列名能一一对应,上述代码依然可以正常运行,不需要额外调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 06:15:37