如何在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
相关产品推荐
相关产品推荐

