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 相关文章推荐
python的几种开发工具介绍
Mar 07 Python
python监控网卡流量并使用graphite绘图的示例
Apr 27 Python
python使用心得之获得github代码库列表
Jun 25 Python
Python中struct模块对字节流/二进制流的操作教程
Jan 21 Python
更改Python的pip install 默认安装依赖路径方法详解
Oct 27 Python
解决pycharm运行时interpreter为空的问题
Oct 29 Python
对python 通过ssh访问数据库的实例详解
Feb 19 Python
python opencv minAreaRect 生成最小外接矩形的方法
Jul 01 Python
用Python实现最速下降法求极值的方法
Jul 10 Python
Django REST framework 视图和路由详解
Jul 19 Python
使用Python制作新型冠状病毒实时疫情图
Jan 28 Python
Python中的流程控制详解
Feb 18 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 Warning: PHP Startup: Unable to load dynamic library \ D:/php5/ext/php_mysqli.dll\
2012/06/17 PHP
Zend Framework实现具有基本功能的留言本(附demo源码下载)
2016/03/22 PHP
PHP foreach遍历多维数组实现方式
2016/11/16 PHP
PHP实现支付宝即时到账功能
2016/12/21 PHP
PHP FileSystem 文件系统常用api整理总结
2019/07/12 PHP
javascript 页面划词搜索JS
2009/09/28 Javascript
jquery实现excel导出的方法
2013/04/04 Javascript
js判断字符长度以及中英文数字等
2013/12/31 Javascript
解析JavaScript数组方法reduce
2016/12/12 Javascript
Angularjs通过指令监听ng-repeat渲染完成后执行脚本的方法
2016/12/31 Javascript
bootstrap fileinput组件整合Springmvc上传图片到本地磁盘
2017/05/11 Javascript
vue.js中过滤器的使用教程
2017/06/08 Javascript
js实现登录与注册界面
2017/11/01 Javascript
Node.js成为Web应用开发最佳选择的原因
2018/02/05 Javascript
vue-cli项目中使用Mockjs详解
2018/05/14 Javascript
实例详解vue中的$root和$parent
2019/04/29 Javascript
详解Vuex下Store的模块化拆分实践
2019/07/31 Javascript
详解JavaScript 作用域
2020/07/14 Javascript
[01:30]2016国际邀请赛中国区预选赛神秘商店火爆开启
2016/06/26 DOTA
[00:11]战神迅矛
2019/03/06 DOTA
python列表与元组详解实例
2013/11/01 Python
在Django同1个页面中的多表单处理详解
2017/01/25 Python
python爬虫入门教程--优雅的HTTP库requests(二)
2017/05/25 Python
python实现学员管理系统
2019/02/26 Python
Python错误的处理方法
2020/06/23 Python
python实现模拟器爬取抖音评论数据的示例代码
2021/01/06 Python
加拿大时装零售商:Influence U
2018/12/22 全球购物
市场营销专科应届生求职信
2013/11/24 职场文书
网络书店创业计划书
2014/02/07 职场文书
贸易跟单员英文求职信
2014/04/19 职场文书
责任书范本
2014/08/25 职场文书
法定代表人授权委托书
2014/09/19 职场文书
支教个人总结
2015/03/04 职场文书
团队拓展训练感想
2015/08/07 职场文书
教师节祝酒词
2015/08/11 职场文书
2016关于预防职务犯罪的心得体会
2016/01/21 职场文书