python中shift函数_pandas DataFrame.shift()函数

本文介绍了Python中Pandas库的DataFrame.shift()函数,用于将数据移动指定位数。详细阐述了period参数用于设置移动步幅,axis参数指定移动轴(0为列,1为行)。通过实例展示了如何使用shift()函数进行数据移动,包括向下、向右以及向上、向左移动,并在实际案例中计算每小时车站进出站人数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

pandas DataFrame.shift()函数可以把数据移动指定的位数

period参数指定移动的步幅,可以为正为负.axis指定移动的轴,1为行,0为列.

eg: 有这样一个DataFrame数据:

import pandas as pd

data1 = pd.DataFrame({

'a': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],

'b': [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

})

print data1

a b

0 0 9

1 1 8

2 2 7

3 3 6

4 4 5

5 5 4

6 6 3

7 7 2

8 8 1

9 9 0

如果想让 a和b的数据都往下移动一位:

data2 = data1.shift(axis=0)

print data2

a b

0 NaN NaN

1 0.0 9.0

2 1.0 8.0

3 2.0 7.0

4 3.0 6.0

5 4.0 5.0

6 5.0 4.0

7 6.0 3.0

8 7.0 2.0

9 8.0 1.0

如果是在行上往右移动一位:

data3 = data1.shift(axis=1)

print data3

a b

0 NaN 0.0

1 NaN 1.0

2 NaN 2.0

3 NaN 3.0

4 NaN 4.0

5 NaN 5.0

6 NaN 6.0

7 NaN 7.0

8 NaN 8.0

9 NaN 9.0

如果想往上或者往左移动,可以指定(periods=-1):

data4 = data1.shift(periods=-1, axis=0)

print data4

a b

0 1.0 8.0

1 2.0 7.0

2 3.0 6.0

3 4.0 5.0

4 5.0 4.0

5 6.0 3.0

6 7.0 2.0

7 8.0 1.0

8 9.0 0.0

9 NaN NaN

一个例子:

这里有一组某车站各个小时的总进站人数和总出站人数的数据:

entries_and_exits = pd.DataFrame({

'ENTRIESn': [3144312, 3144335, 3144353, 3144424, 3144594,

3144808, 3144895, 3144905, 3144941, 3145094],

'EXITSn': [1088151, 1088159, 1088177, 1088231, 1088275,

1088317, 1088328, 1088331, 1088420, 1088753]

})

要求计算每个小时该车站进出站人数

思路: 把第n+1小时的总人数-第n小时的总人数,就是这个小时里的进出站人数

entries_and_exits_hourly = entries_and_exits - entries_and_exits.shift(axis=0)print(entries_and_exits_hourly.fillna(0)) #最后用0来填补NaN

ENTRIESn EXITSn

0 0.0 0.0

1 23.0 8.0

2 18.0 18.0

3 71.0 54.0

4 170.0 44.0

5 214.0 42.0

6 87.0 11.0

7 10.0 3.0

8 36.0 89.0

9 153.0 333.0

pandas DataFrame apply()函数(1)

之前已经写过pandas DataFrame applymap()函数 还有pandas数组(pandas Series)-(5)apply方法自定义函数 pandas DataFrame 的 app ...

pandas DataFrame apply()函数(2)

上一篇pandas DataFrame apply()函数(1)说了如何通过apply函数对DataFrame进行转换,得到一个新的DataFrame. 这篇介绍DataFrame apply()函数 ...

pandas DataFrame applymap()函数

pandas DataFrame的 applymap() 函数可以对DataFrame里的每个值进行处理,然后返回一个新的DataFrame: import pandas as pd df = pd. ...

[Python Study Notes]pandas.DataFrame.plot()函数绘图

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ...

pandas.DataFrame的pivot()和unstack()实现行转列

示例: 有如下表需要进行行转列: 代码如下: # -*- coding:utf-8 -*- import pandas as pd import MySQLdb from warnings impor ...

把pandas dataframe转为list方法

把pandas dataframe转为list方法 先用numpy的 array() 转为ndarray类型,再用tolist()函数转为list

Pandas Dataframe增、删、改、查、去重、抽样基本操作

总括 pandas的索引函数主要有三种: loc 标签索引,行和列的名称 iloc 整型索引(绝对位置索引),绝对意义上的几行几列,起始索引为0 ix 是 iloc 和 loc的合体 at是loc的快 ...

【338】Pandas.DataFrame

Ref: Pandas Tutorial: DataFrames in Python Ref: pandas.DataFrame Ref: Pandas:DataFrame对象的基础操作 Ref: C ...

Pandas dataframe 标记删除重复记录

Pandas提供了duplicated.Index.duplicated.drop_duplicates函数来标记及删除重复记录 duplicated函数用于标记Series中的值.DataFrame ...

随机推荐

有向图的强连通分量的求解算法Tarjan

Tarjan算法 Tarjan算法是基于dfs算法,每一个强连通分量为搜索树中的一颗子树.搜索时,把当前搜索树中的未处理的结点加入一个栈中,回溯时可以判断栈顶到栈中的结点是不是在同一个强连通分量中.当 ...

ubuntu系统 用户进入后命令行只有一个“$” 美元符号

在新添加用户后,切换到该用户下面后: 发现命令行前面只有一个$符号,很不方便. 虽然每次输入一个bash可以解决,但是太麻烦. 如何解决呢? sudo vi /etc/passwd 找到该用户 wan ...

浅谈 man 命令的日常使用

Linux系统提供了相对比较丰富的帮助手册(man),man是manual的缩写,在日常linux系统管理中经常用到,今天就简单聊聊man.man 本身也提供自己的帮助手册,通过man就可以查看. ( ...

[Form Builder]:CREATE_GROUP Built-in

Description  Creates a non-query record group with the given name. The new record group has no colum ...

Ecstore中如何调用发起Ajax请求

Ecstore的JS框架使用了mootools,所以ajax调用也使用mootools中的Request组件. 语法: var myRequest = new Request([options]); ...

vue的一些坑(第二天)

首先啊感谢一位小童鞋的指出其实我写的这些内容算不上坑,只是平时使用的时候的一点小问题,不过只是个名字啦!再次致谢 1:两个简写的命令 v-bind:class可以简写为  :class v-on:cl ...

对foreach循环的思考

阿里java开发手册已经发表,很多都值得认真研究思考,看到零度的思考题,没忍住研究了一下. 零度的思考:https://mp.weixin.qq.com/s/dDR21k30s6ZVfDvl8BVQm ...

ABP架构学习系列二:ABP中配置的注册和初始化

一.手工搭建平台 1.创建项目 创建MVC5项目,手动引入Abp.Abp.Web.Abp.Web.Mvc.Abp.Web.Api 使用nuget添加Newtonsoft.Json.Castle.Cor ...

Key-Value Store Indexer(Lily HBase Indexer) 小型采坑

环境: Cloudera Express 5.12.1 JDK 1.8.0_92 CentOS 7 步骤1:数据导入到Hbase中(非正题,跳过) hbase中表为allDoc,两个Family:fu ...

angularjs和ajax的结合使用 (三)

转眼九月份了,忙忙碌碌 发现今年还没开过张,写一篇吧. 15年在空闲时就倒腾过angularjs那玩意儿 ,觉得还是挺好的,李金龙那厚厚的一本书,只不过没有系统化应用.最主要的是原来有一个东西没有用到 ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值