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

Pandas如何使用df.diff()实现当前行A列与上一行B列比对计算

Pandas实现当前行A列与上一行B列差值计算

直接用Pandas内置的矢量化方法shift()就能实现,不需要逐行遍历,性能最优。

实现步骤

  • 先构造示例测试数据集
  • 对B列调用shift(1)方法,将整列数据向下偏移1位,此时每一行拿到的就是原B列上一行的数值
  • 用当前行的A列值减去偏移后的B列值,即可得到目标差值;首行因为没有上一行数据,计算结果会是NaN,按需填充为初始0值即可

完整代码示例

import pandas as pd

# 构造示例数据集
df = pd.DataFrame({
    'A': [0.904560, 0.679290, 0.069841, 0.045818, 0.485712, 0.771665, 0.485041, 0.897172, 0.561953, 0.412803],
    'B': [0.208318, 0.747496, 0.165834, 0.907888, 0.593785, 0.800182, 0.024829, 0.584406, 0.626699, 0.900643],
    'diff': [0]*10
})

# 计算差值:当前行A - 上一行B
df['diff'] = df['A'] - df['B'].shift(1)
# 首行无前置数据,填充为初始0
df['diff'] = df['diff'].fillna(0)

计算结果参考

执行完代码后得到的DataFrame如下:

A         B      diff
0  0.904560  0.208318  0.000000
1  0.679290  0.747496  0.470972
2  0.069841  0.165834 -0.677655
3  0.045818  0.907888 -0.120016
4  0.485712  0.593785 -0.422176
5  0.771665  0.800182  0.177880
6  0.485041  0.024829 -0.315141
7  0.897172  0.584406  0.872343
8  0.561953  0.626699 -0.022453
9  0.412803  0.900643 -0.213896

补充说明

  • 如果需要做两值的大小比对,直接基于计算出的diff列判断即可,比如df['A_larger_than_prevB'] = df['diff'] > 0就能标记出当前行A大于上一行B的记录
  • 不要使用iterrows()、apply()逐行迭代做这个计算,数据量较大时矢量化的shift()运算性能会比逐行循环高几个数量级

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 07:27:16