当前位置: 首页 > news >正文

【Pandas】pandas DataFrame shift

Pandas2.2 DataFrame

Time Series-related

方法描述
DataFrame.asfreq(freq[, method, how, …])用于**将时间序列数据转换为指定频率(resample to frequency)**的方法
DataFrame.asof(where[, subset])用于查找时间序列中最接近指定时间点的非 NaN 值的方法
DataFrame.shift([periods, freq, axis, …])用于**将 DataFrame 的数据沿着指定轴移动(平移)**的方法

pandas.DataFrame.shift()

pandas.DataFrame.shift() 是一个用于**将 DataFrame 的数据沿着指定轴移动(平移)**的方法。它常用于时间序列分析中,例如计算滞后值(lag)、滚动变化等。


📌 方法签名
DataFrame.shift(periods=1, freq=None, axis=0, fill_value=<no_default>, suffix=None)

🔧 参数说明:
参数说明
periods移动的步数,默认为 1;正值表示向下/向右移动,负值表示向上/向左移动
freq可选参数,如果索引是时间类型,可以指定频率(如 'D', 'H' 等),此时会调整时间索引而不是数据
axis移动方向,默认为 0(行方向),即纵向移动;若为 1 则横向移动列
fill_value用于填充新引入的 NaN 值,默认为 NaN,可设置为任意标量(如 0
suffixPandas 2.2 新增参数,用于在移动后重命名列名,仅在返回新 DataFrame 时有效(当 freq 不为 None 时不生效)

✅ 返回值
  • 返回一个新的 DataFrame;
  • 原始数据不会被修改(除非使用 inplace=True);

🧪 示例代码及结果
示例 1:基本用法(默认参数)
import pandas as pd
import numpy as np# 创建一个简单的 DataFrame
df = pd.DataFrame({'A': [10, 20, 30, 40],'B': [100, 200, 300, 400]
}, index=['x', 'y', 'z', 'w'])print("Original DataFrame:")
print(df)
输出:
    A    B
x  10  100
y  20  200
z  30  300
w  40  400
# 向下移动一行(默认 periods=1)
shifted_df = df.shift()
print("\nAfter shift():")
print(shifted_df)
输出:
     A      B
x  NaN    NaN
y  10.0  100.0
z  20.0  200.0
w  30.0  300.0

示例 2:向前移动(负数 periods)
# 向上移动一行
shifted_up = df.shift(-1)
print("\nAfter shift(-1):")
print(shifted_up)
输出:
     A      B
x  20.0  200.0
y  30.0  300.0
z  40.0  400.0
w   NaN    NaN

示例 3:设置 fill_value
# 使用 0 填充空缺值
shifted_fill0 = df.shift(fill_value=0)
print("\nAfter shift(fill_value=0):")
print(shifted_fill0)
输出:
    A    B
x   0    0
y  10  100
z  20  200
w  30  300

示例 4:按时间频率移动(freq 参数)
# 创建带时间索引的 DataFrame
index = pd.date_range('2025-01-01', periods=4, freq='D')
df_time = pd.DataFrame({'value': [10, 20, 30, 40]
}, index=index)print("Original Time Series DataFrame:")
print(df_time)
输出:
            value
2025-01-01     10
2025-01-02     20
2025-01-03     30
2025-01-04     40
# 按一天频率移动时间索引(不改变数据位置)
shifted_freq = df_time.shift(freq='D')
print("\nAfter shift(freq='D'):")
print(shifted_freq)
输出:
            value
2025-01-02     10
2025-01-03     20
2025-01-04     30
2025-01-05     40

🧠 应用场景
场景说明
时间序列滞后分析计算当前值与前一时刻的差值、增长率等
特征工程构造滞后特征用于预测模型
数据对齐对齐不同时间点的数据进行比较
缺失值插入模拟缺失或延迟观测数据
窗口计算辅助配合 .diff(), .pct_change() 等方法使用

⚠️ 注意事项
  • shift() 默认是按行移动(axis=0);
  • 如果使用 freq,则不会改变数据内容,只会移动索引;
  • suffix 参数只在返回新 DataFrame 时生效(不能与 freq 一起使用);
  • fill_value 可以避免出现 NaN,便于后续处理;
  • periods 很大,可能导致大量 NaN 出现。

✅ 总结对比
方法是否移动数据是否支持时间频率是否支持列名后缀是否填充缺失值
.shift()✅(Pandas 2.2+)
.diff()✅(自动调用 shift)
.rolling()
.reindex()

如果你希望构造滞后变量、对齐时间序列数据、或模拟延迟观测shift() 是非常实用且灵活的工具。

http://www.lryc.cn/news/575381.html

相关文章:

  • Ubuntu下布署mediasoup-demo
  • 黑马JVM解析笔记(四):Javap图解指令流程,深入理解Java字节码执行机制
  • Redis 为什么选用跳跃表,而不是红黑树
  • 《聊一聊ZXDoc》之汽车标定、台架标定、三高标定
  • 【STM32】外部中断
  • 【C++11】右值引用和移动语义
  • gRPC 使用(python 版本)
  • 2025学年湖北省职业院校技能大赛 “信息安全管理与评估”赛项 样题卷(五)
  • Axure版TDesign 组件库-免费版
  • MQTT 和 HTTP 有什么本质区别?
  • 如何将 Memfault 固件 SDK 集成到使用 Nordic 的 nRF Connect SDK(NCS)的项目中
  • 数据结构进阶 - 第四,五章 串、数组和广义表
  • Docker 入门教程(一):从概念到第一个容器
  • 水质指数预测模型R²偏低的原因分析与优化策略
  • 2-深度学习挖短线股-1-股票范围选择
  • uniapp微信小程序:editor组件placeholder字体样式修改
  • vue3 + elementPlus 封装hook,检测form表单数据修改变更;示例用 script setup 语法使用
  • SpringBoot项目快速开发框架JeecgBoot——Web处理!
  • 一次开发,多端适配!全面掌握Dioxus跨平台开发框架!
  • 远程玩3A大作要多少帧?ToDesk、向日葵、UU远程性能对决
  • 面试破局:告别流水账,用“故事思维”重塑自我介绍
  • rocketmq中broker和namesrv的区别和联系?
  • 川翔云电脑全新上线:三维行业高效云端算力新选择
  • 智能化监管:微算法科技(NASDAQ:MLGO)比特币社区分类器助力加密货币市场规范发展
  • CRON表达式编辑器与定时任务实现技术文档
  • 阿里云ACP-检索分析服务
  • fnm node包管理器
  • 《解锁FFmpeg - python:开启多媒体处理新时代》
  • GNSS位移监测站在大坝安全中的用处
  • Lynx vs React Native vs Flutter 全面对比:三大跨端框架实测分析