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

【Pandas】pandas Series shift

Pandas2.2 Series

Time Series-related

方法描述
Series.asfreq(freq[, method, how, …])用于将时间序列数据转换为指定的频率
Series.asof(where[, subset])用于返回时间序列中指定索引位置的最近一个非缺失值
Series.shift([periods, freq, axis, …])用于将时间序列数据沿指定轴移动指定的周期数

pandas.Series.shift

pandas.Series.shift 方法用于将时间序列数据沿指定轴移动指定的周期数。它可以用于向前或向后移动数据,并可以选择不同的填充方式来处理移出范围的数据。

详细描述
  • 参数:
    • periods: 整数,默认为 1。表示要移动的周期数。正值表示向后移动(即下移),负值表示向前移动(即上移)。
    • freq: 可选,频率偏移量。如果提供,则根据该频率进行时间戳的移动。
    • axis: 可选,默认为 0。表示沿哪个轴进行移动,对于 Series 来说通常是 0
    • fill_value: 可选,默认为 None。用于填充移出范围的数据。如果未提供,则默认使用 NaN
    • suffix: 该参数在 pandas.Series.shift 中无效,可能是其他方法中的参数,请忽略。
返回值
  • 返回一个新的 Series,其中数据已根据指定的周期数和频率进行了移动。
示例代码及结果
import pandas as pd
import numpy as np

# 创建一个带有日期索引的时间序列
dates = pd.date_range(start='2023-10-01', periods=5, freq='D')
s = pd.Series([1, 2, 3, 4, 5], index=dates)

print("原始 Series:")
print(s)

# 向后移动 2 个周期
s_shifted_2_periods = s.shift(periods=2)

print("\n向后移动 2 个周期后的 Series:")
print(s_shifted_2_periods)

# 向前移动 1 个周期,并用 0 填充移出范围的数据
s_shifted_neg1_fill0 = s.shift(periods=-1, fill_value=0)

print("\n向前移动 1 个周期并用 0 填充后的 Series:")
print(s_shifted_neg1_fill0)

# 根据频率移动时间戳
s_shifted_freq = s.shift(freq='2D')

print("\n根据频率 '2D' 移动时间戳后的 Series:")
print(s_shifted_freq)
输出结果
原始 Series:
2023-10-01    1
2023-10-02    2
2023-10-03    3
2023-10-04    4
2023-10-05    5
Freq: D, dtype: int64

向后移动 2 个周期后的 Series:
2023-10-01    NaN
2023-10-02    NaN
2023-10-03    1.0
2023-10-04    2.0
2023-10-05    3.0
Freq: D, dtype: float64

向前移动 1 个周期并用 0 填充后的 Series:
2023-10-01    2
2023-10-02    3
2023-10-03    4
2023-10-04    5
2023-10-05    0
Freq: D, dtype: int64

根据频率 '2D' 移动时间戳后的 Series:
2023-10-03    1
2023-10-04    2
2023-10-05    3
2023-10-06    4
2023-10-07    5
Freq: D, dtype: int64
结果解释
  • 向后移动 2 个周期
    • 数据向下移动了 2 个位置,因此前两个位置是 NaN,后续位置的数据依次下移。
  • 向前移动 1 个周期并用 0 填充
    • 数据向上移动了 1 个位置,因此最后一个位置用 0 填充,其他位置的数据依次上移。
  • 根据频率 ‘2D’ 移动时间戳
    • 时间戳增加了 2 天,但数据保持不变,只是索引发生了变化。

这种方法非常适用于时间序列分析中需要对齐不同时间段的数据或进行滞后/超前分析的场景。

相关文章:

  • 操作系统知识点28
  • Tomato靶机攻略
  • Redis超高并发分key实现
  • HDR图像处理:色调映射和色域映射参数
  • 记一次OOM异常问题排查
  • 感觉自己邮电部诗人
  • electron + vue3 + vite 渲染进程与渲染进程之间的消息端口通信
  • 用nodejs加electron加roboticjs判断鼠标点击时是否在浏览器内部
  • 1.VisionPro的安装
  • 植物学(botany)这个单词怎么记?牛吃草,草是一种植物
  • BLDC直流无刷电机转速电流双闭环调速MATLAB仿真
  • PyTorch分布式训练
  • 基于 Selenium 的软件测试方法研究
  • Java 大视界 -- Java 大数据中的数据可视化大屏设计与开发实战(127)
  • Oracle VirtualBox安装CentOS 7
  • STM32使用EXTI触发进行软件消抖(更新中)
  • CDefView::_GetPIDL函数分析之ListView_GetItem函数的参数item的item.mask 为LVIF_PARAM
  • Linux_17进程控制
  • 某快餐店用户市场数据挖掘与可视化
  • 强大的数据库DevOps工具:NineData 社区版
  • 烤肉店从泔水桶内捞出肉串再烤?西安未央区市监局:停业整顿
  • 南方降水频繁暴雨连连,北方高温再起或现40°C酷热天气
  • 与总书记交流的上海人工智能实验室年轻人,在探索什么前沿领域?
  • 财政部党组召开2025年巡视工作会议暨第一轮巡视动员部署会
  • 外交部:反对美方人士发表不负责任谬论
  • 京东一季度净利增长五成,营收增速创近三年新高,称外卖业务取得显著进展