Python学习笔记:shift函数实现数据偏移
一、背景
当需要统计不同周期的变化情况时,需要使用数据偏移,在 Python
中使用 shift
函数实现。
# 一阶差分
diff_num = num - num.shift(1)
二、实现
1.创建测试表
import pandas as pd
dic = {'id':[1,2,2,3,3,3],
'num':[4,2,7,10,5,5]
}
data = pd.DataFrame(dic)
print(data)
```
id num
0 1 4
1 2 2
2 2 7
3 3 10
4 3 5
5 3 5
```
2.分析
- 新增一列存储每个id上一周期数量
- 将两列做差即可
3.shift函数
通过 shift
函数实现数据的上下偏移,使用语法:
df.shift(periods=1, freq=None, axis=0)
- periods 偏移的幅度(正值表示下、右编译,负值表示上、左偏移)
- freq 适用于时间索引的偏移 值不发生变化
- axis 轴向指定(axis=0表示纵向偏移,axis=1表示横向偏移,默认纵向)
4.实例
# 所有字段向下偏移一行
data.shift(1)
```
id num
0 NaN NaN
1 1.0 4.0
2 2.0 2.0
3 2.0 7.0
4 3.0 10.0
5 3.0 5.0
```
# 所有字段向上偏移一行
data.shift(-1)
```
id num
0 2.0 2.0
1 2.0 7.0
2 3.0 10.0
3 3.0 5.0
4 3.0 5.0
5 NaN NaN
```
# 所有字段向右偏移一列
data.shift(1, axis=1)
```
id num
0 NaN 1.0
1 NaN 2.0
2 NaN 2.0
3 NaN 3.0
4 NaN 3.0
5 NaN 3.0
```
# 所有字段向左偏移一列
data.shift(-1, axis=1)
```
id num
0 4.0 NaN
1 2.0 NaN
2 7.0 NaN
3 10.0 NaN
4 5.0 NaN
5 5.0 NaN
```
# 全部偏移
data["last_num"] = data["num"]
data["last_num"] = data["last_num"].shift(1).fillna(0)
```
id num last_num
0 1 4 0.0
1 2 2 4.0
2 2 7 2.0
3 3 10 7.0
4 3 5 10.0
5 3 5 5.0
```
# 按id分组偏移
data["last_num"] = data.groupby("id")["num"].shift(1).fillna(0)
data["diff_num"] = data["num"] - data["last_num"]
```
id num last_num diff_num
0 1 4 0.0 4.0
1 2 2 0.0 2.0
2 2 7 2.0 5.0
3 3 10 0.0 10.0
4 3 5 10.0 -5.0
5 3 5 5.0 0.0
```
参考链接:利用Python实现数据偏移
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)