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

如何在Python中通过列偏移计算DataFrame连续行的差值

用Python计算DataFrame连续行差值的两种简单方法

嘿,这个需求其实用pandas的工具就能轻松实现!我给你分享两种最常用的方式,都能通过列偏移的思路搞定:

方法一:用shift()手动计算偏移差值

shift()方法可以把DataFrame的行整体向上/向下偏移指定的步数,我们只需要用原始数据减去偏移后的数据,就能得到连续行的差值了。

举个实际例子,先模拟你的原始DataFrame:

import pandas as pd

# 假设这是你的原始数据
original_df = pd.DataFrame({
    '数值列1': [20, 25, 33, 28],
    '数值列2': [10, 14, 16, 12],
    '数值列3': [5, 8, 6, 10]
})

接下来执行偏移计算:

# 将所有行向下偏移1步(第一行变为NaN)
shifted_df = original_df.shift(1)
# 计算当前行 - 上一行的差值
diff_result = original_df - shifted_df

得到的结果会是这样:

数值列1  数值列2  数值列3
0    NaN    NaN    NaN
1    5.0    4.0    3.0
2    8.0    2.0   -2.0
3   -5.0   -4.0    4.0

如果想要上一行 - 当前行的差值,只需要调换顺序:shifted_df - original_df就行。

方法二:用内置的diff()方法(更简洁)

pandas其实自带了专门计算行/列差值的diff()方法,它本质上就是封装了shift()的逻辑,用起来更省心:

# 默认计算当前行与上一行的差值,效果和方法一完全一致
diff_result = original_df.diff()

如果你想计算当前行与下一行的差值,只需要传入periods=-1参数:

# 当前行 - 下一行的差值
diff_result_next = original_df.diff(periods=-1)

额外处理:去掉开头的NaN值

因为第一行没有上一行数据,结果里会出现NaN。如果需要删除这一行,可以用:

diff_result_clean = diff_result.dropna()

或者用填充值替换NaN,比如用0填充:

diff_result_filled = diff_result.fillna(0)

这样就能完美得到你想要的连续行差值结果啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:04:52