Pandas 解决dataframe的一列进行向下顺移问题


Posted in Python onDecember 27, 2019

最近做比赛,有时候需要造出新的特征,而这次遇到的问题是将一列数据往下顺移一位。同时将开头缺失的那一个数据用其他方式填充。

df['feature'].shift(1)向下顺移一位,这时第一位会置为nan,需要填充。

----------------------历史分割线-----------------

错误方案:

当时首先想到的是用loc来直接进行替换,也就是

i = len(dt)
 
  dt_new = pd.DataFrame()
 
  dt_new.loc[0, 'test'] = 0
 
  dt_new.loc[1 : i - 1, 'test'] = dt.loc[0 : i - 2, 'data'] #这里会报错

愿望很美好,现实很残酷,这种方法会报错。

不太好的方案:

于是打算用循环的办法一个一个替换

dt_new = pd.DataFrame()
 
dt_new.loc[0, 'test'] = 0
 
for i in range(len(dt) - 1):
  dt_new.loc[i + 1, 'test'] = dt.loc[i, 'data']

然而这个仅仅O(n)算法复杂度的东西,实际检验当用在几万行数据真的可以给你算好久好久,所以这个办法也弃用了。

正确方案:

pandas的dataframe,每一行是有序号的,直接进行替换的话,有时它会将相同序号的进行替换,这个是dataFrame的特性,有时会忽略从你选择的那一行开始替换,而直接从0开始。所以如果想用pandas来进行顺位移动的话,目前没有在API中找到便捷的方法。

最后终于想到了另外一个办法,就是转化为Numpy数组进行移动后,再转回dataFrame。

dt_v = dt['data'].values
 
  dt_v = dt_v.flatten()
 
  i = len(dt)
 
  dt_new_v = np.zeros(i)
 
  dt_new_v[0] = 0
 
  dt_new_v[1 : i] = dt_v[0 : i - 1] #这里要注意Numpy数组截取[1, i]实际截取的是[1, i - 1]行!
 
  dt_new = pd.DataFrame()
 
  dt_new['test'] = dt_new_v

要注意Numpy数组截取[1, i]实际截取的是第[1, i - 1]行!

以上这篇Pandas 解决dataframe的一列进行向下顺移问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
以一段代码为实例快速入门Python2.7
Mar 31 Python
Python中map和列表推导效率比较实例分析
Jun 17 Python
Python的Django框架可适配的各种数据库介绍
Jul 15 Python
Python3编程实现获取阿里云ECS实例及监控的方法
Aug 18 Python
基于python 爬虫爬到含空格的url的处理方法
May 11 Python
Centos下实现安装Python3.6和Python2共存
Aug 15 Python
华为校园招聘上机笔试题 扑克牌大小(python)
Apr 22 Python
Django rstful登陆认证并检查session是否过期代码实例
Aug 13 Python
Python3基本输入与输出操作实例分析
Feb 14 Python
Python request中文乱码问题解决方案
Sep 17 Python
Python 解析xml文件的示例
Sep 29 Python
Matlab使用Plot函数实现数据动态显示方法总结
Feb 25 Python
Pandas实现DataFrame按行求百分数(比例数)
Dec 27 #Python
pandas的相关系数与协方差实例
Dec 27 #Python
详解opencv中画圆circle函数和椭圆ellipse函数
Dec 27 #Python
如何更改 pandas dataframe 中两列的位置
Dec 27 #Python
使用OpenCV circle函数图像上画圆的示例代码
Dec 27 #Python
python的slice notation的特殊用法详解
Dec 27 #Python
详解Python Opencv和PIL读取图像文件的差别
Dec 27 #Python
You might like
社区(php&&mysql)一
2006/10/09 PHP
php设计模式 Bridge (桥接模式)
2011/06/26 PHP
php 定义404页面的实现代码
2012/11/19 PHP
yii2 数据库读写分离配置示例
2017/02/10 PHP
thinkPHP简单导入和使用阿里云OSSsdk的方法
2017/03/15 PHP
laravel通过a标签从视图向控制器实现传值
2019/10/15 PHP
popdiv
2006/07/14 Javascript
url 编码 js url传参中文乱码解决方案
2010/04/11 Javascript
JQuery 弹出框定位实现方法
2010/12/02 Javascript
裁剪字符串trim()自定义改进版
2013/04/10 Javascript
Jquery方式获取iframe页面中的 Dom元素
2014/05/07 Javascript
nodejs开发微博实例
2015/03/25 NodeJs
JavaScript生成福利彩票双色球号码
2015/05/15 Javascript
Jquery数字上下滚动动态切换插件
2015/08/08 Javascript
AngularJS入门教程之ng-class 指令用法
2016/08/01 Javascript
解决Vue.js 2.0 有时双向绑定img src属性失败的问题
2018/03/14 Javascript
vue中的mvvm模式讲解
2019/01/31 Javascript
浅析python 内置字符串处理函数的使用方法
2014/06/11 Python
Python基于回溯法子集树模板解决数字组合问题实例
2017/09/02 Python
解决Python中定时任务线程无法自动退出的问题
2019/02/18 Python
python 机器学习之支持向量机非线性回归SVR模型
2019/06/26 Python
python2和python3实现在图片上加汉字的方法
2019/08/22 Python
利用Bootstrap实现漂亮简洁的CSS3价格表实例源码
2017/03/02 HTML / CSS
意大利体育用品网上商城:Nencini Sport
2016/08/18 全球购物
Europcar西班牙:全球汽车租赁领域的领导者
2018/09/17 全球购物
小学防溺水制度
2014/01/29 职场文书
八项规定整改措施
2014/02/12 职场文书
专题组织生活会发言材料
2014/10/17 职场文书
青年文明号汇报材料
2014/12/23 职场文书
岁月神偷观后感
2015/06/11 职场文书
表彰大会新闻稿
2015/07/17 职场文书
2016年9月份红领巾广播稿
2015/12/21 职场文书
2019辞职报告范本3篇!
2019/07/23 职场文书
浅谈Python魔法方法
2021/06/28 Java/Android
Anaconda安装pytorch和paddle的方法步骤
2022/04/03 Python
Java 死锁解决方案
2022/05/11 Java/Android