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.实例
'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
# 所有字段向下偏移一行
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有帮助!
Python基础入门教程推荐:更多Python视频教程-关注B站:Python学习者
https://www.bilibili.com/video/BV1LL4y1h7ny?share_source=copy_web
Python爬虫案例教程推荐:更多Python视频教程-关注B站:Python学习者
https://www.bilibili.com/video/BV1QZ4y1N7YA?share_source=copy_web