【Pandas】pandas DataFrame diff

发布于:2025-05-16 ⋅ 阅读:(13) ⋅ 点赞:(0)

Pandas2.2 DataFrame

Computations descriptive stats

方法 描述
DataFrame.abs() 用于返回 DataFrame 中每个元素的绝对值
DataFrame.all([axis, bool_only, skipna]) 用于判断 DataFrame 中是否所有元素在指定轴上都为 True
DataFrame.any(*[, axis, bool_only, skipna]) 用于判断 DataFrame 中是否至少有一个元素在指定轴上为 True
DataFrame.clip([lower, upper, axis, inplace]) 用于截断(限制)DataFrame 中的数值
DataFrame.corr([method, min_periods, …]) 用于计算 DataFrame 中各列之间的相关系数矩阵(Correlation Matrix)
DataFrame.corrwith(other[, axis, drop, …]) 用于计算当前 DataFrame 的每一列(或行)与另一个 Series 或 DataFrame 中对应列的相关系数
DataFrame.count([axis, numeric_only]) 用于统计 DataFrame 中每列或每行的非空(非 NaN)元素数量
DataFrame.cov([min_periods, ddof, numeric_only]) 用于计算 DataFrame 中每对列之间的协方差
DataFrame.cummax([axis, skipna]) 用于计算 DataFrame 中每列或每行的累计最大值(cumulative maximum)
DataFrame.cummin([axis, skipna]) 用于计算 DataFrame 中每列或每行的累计最小值(cumulative minimum)
DataFrame.cumprod([axis, skipna]) 用于计算 DataFrame 中每列或每行的累计乘积(cumulative product)
DataFrame.cumsum([axis, skipna]) 用于计算 DataFrame 中每列或每行的累计和(cumulative sum)
DataFrame.describe([percentiles, include, …]) 用于快速生成数据集的统计摘要(summary statistics)
DataFrame.diff([periods, axis]) 用于计算 DataFrame 中相邻行或列之间的差值(差分)

pandas.DataFrame.diff()

pandas.DataFrame.diff() 方法用于计算 DataFrame 中相邻行或列之间的差值(差分)。它常用于时间序列分析、趋势检测、数据变化监控等场景。


📌 方法签名:
DataFrame.diff(periods=1, axis=0)

🧾 参数说明:
参数 类型 描述
periods int, 默认 1 指定向前/向后移动的步数,正值表示当前行与前 periods 行相减,负值则相反。
axis {0/‘index’, 1/‘columns’}, 默认 0
  • 0'index':按行计算差分(默认)
  • 1'columns':按列计算差分 |

📊 返回值:

返回一个新的 DataFrame,其形状与原 DataFrame 相同,但第一组(根据 periods 大小)行或列的值为 NaN(因为没有对应的前一行/列进行差分运算)。


✅ 示例及结果:
示例1:默认参数(按行计算一阶差分)
import pandas as pd

df = pd.DataFrame({
    'A': [10, 20, 15, 25, 30],
    'B': [100, 120, 110, 130, 140]
})

print(df.diff())
输出结果:
      A     B
0   NaN   NaN
1  10.0  20.0
2  -5.0 -10.0
3  10.0  20.0
4   5.0  10.0

解释:

  • 默认 periods=1,即每行与上一行相减。
  • 第0行无前一行 → NaN

示例2:设置 periods=2(两阶差分)
print(df.diff(periods=2))
输出结果:
      A     B
0   NaN   NaN
1   NaN   NaN
2  -5.0  10.0
3  10.0  20.0
4  15.0  30.0

解释:

  • 当前行与前两行相减,因此前两行为 NaN

示例3:负 periods(未来行减当前行)
print(df.diff(periods=-1))
输出结果:
      A     B
0 -10.0 -20.0
1   5.0  10.0
2 -10.0 -20.0
3  -5.0 -10.0
4   NaN   NaN

解释:

  • 当前行与下一行相减(未来减现在),最后一行为 NaN

示例4:按列计算差分(axis=1
df_col = pd.DataFrame({
    'X': [1, 2, 3],
    'Y': [4, 5, 6],
    'Z': [7, 8, 9]
})

print(df_col.diff(axis=1))
输出结果:
     X    Y     Z
0  NaN  3.0   3.0
1  NaN  3.0   3.0
2  NaN  3.0   3.0

解释:

  • 每列与前一列相减,因此第一列 X 全为 NaN

🎯 适用场景:
场景 描述
时间序列分析 计算每日/每月变化量,如销售额增长、温度变化等
趋势检测 分析数据上升或下降的趋势
异常检测 差分后突变值可能表示异常行为
特征工程 构造新的特征(如变化率、增长率)

⚠️ 注意事项:
  • 只对数值型列有效,非数值列会被忽略
  • 差分后的结果中会包含 NaN 值(无法计算的部分)
  • 支持正负 periods,可灵活控制前后方向
  • 不会影响原始 DataFrame,返回新对象

📋 总结:
特性 描述
功能 计算 DataFrame 的行间或列间的差分
默认行为 按行计算一阶差分(periods=1
是否修改原数据 否,返回新 DataFrame
适用类型 数值型列(int、float)
灵活性 支持任意步长和方向(periodsaxis

diff() 是一个非常实用的数据变换工具,尤其适合处理时间序列和变化监测任务。