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

Pandas实现不同维度两个时间序列DataFrame逐列差值计算

逐列计算DataFrame行差值的实现方法

直接利用pandas的向量化广播特性即可实现,核心计算仅需1行代码,性能远高于遍历或apply方案。

完整实现代码

import pandas as pd
import numpy as np

# 构造示例数据
df1 = pd.DataFrame({
    'Date':['2021-01-01', '2021-01-02', '2021-01-03', '2021-01-04'],
    '01K W':[1.2, 0.4, 0.2, -0.4], 
    '02K W':[3.5, 3.2, 'nan', 'nan'], 
    '03K W':[-1, -2.3, 0.3, 2.4], 
    '04K W':[1.5, 2.6, 3.2, 4.2]})

df2 = pd.DataFrame({
    'Date':['2021-01-01', '2021-01-02', '2021-01-03', '2021-01-04'],
    'K W':[1, 1.5, 1.2, 0.8]})

# 预处理:将字符串格式的nan转为pandas识别的空值
df1 = df1.replace('nan', np.nan)
# 按日期对齐行,避免行顺序错乱导致计算错误
df1 = df1.set_index('Date')
df2 = df2.set_index('Date')

# 核心计算:axis=0指定按行匹配,df1所有列逐行减去df2对应行的K W值
# 若需要取差值绝对值,在外层加abs()即可匹配示例输出:df1.sub(df2['K W'], axis=0).abs().reset_index()
df3 = df1.sub(df2['K W'], axis=0).reset_index()

验证说明

运行后输出的df3符合差值计算逻辑,空值会自动保留无需额外处理,加绝对值后和你给出的示例结果完全一致。

注意事项

  • 若已经能保证两个DataFrame的行顺序、行数量完全匹配,可以省略set_index对齐步骤,直接用df1.iloc[:,1:](跳过Date列)减df2.iloc[:,1]即可
  • 该方案为向量化运算,数据量越大性能优势越明显,远优于循环遍历每列计算的方案

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 17:48:03