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内置函数之filter map reduce介绍
Nov 30 Python
Python进行数据科学工作的简单入门教程
Apr 01 Python
在Python的Django框架中获取单个对象数据的简单方法
Jul 17 Python
Python中基本的日期时间处理的学习教程
Oct 16 Python
python套接字流重定向实例汇总
Mar 03 Python
linecache模块加载和缓存文件内容详解
Jan 11 Python
Python实现定时精度可调节的定时器
Apr 15 Python
Python实现读取txt文件中的数据并绘制出图形操作示例
Feb 26 Python
python爬虫简单的添加代理进行访问的实现代码
Apr 04 Python
pytorch 求网络模型参数实例
Dec 30 Python
python thrift 实现 单端口多服务的过程
Jun 08 Python
Python爬虫代理池搭建的方法步骤
Sep 28 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
截获网站title标签之家内容的例子
2006/10/09 PHP
实例(Smarty+FCKeditor新闻系统)
2007/01/02 PHP
用PHP代替JS玩转DOM的思路及示例代码
2014/06/15 PHP
PHP对文件夹递归执行chmod命令的方法
2015/06/19 PHP
类似框架的js代码
2006/11/09 Javascript
js实现DIV的一些简单控制
2007/06/04 Javascript
JS在IE和FF下attachEvent,addEventListener学习笔记
2009/11/26 Javascript
Dom 是什么的详细说明
2010/10/25 Javascript
javascript高级程序设计第二版第十二章事件要点总结(常用的跨浏览器检测方法)
2012/08/22 Javascript
JS中的prototype与面向对象的实例讲解
2013/05/22 Javascript
js判断选择的时间是否大于今天的代码
2013/08/20 Javascript
JavaScript常用代码书写规范的超全面总结
2016/09/11 Javascript
jQuery分页插件jquery.pagination.js使用方法解析
2017/02/09 Javascript
Node.js之网络通讯模块实现浅析
2017/04/01 Javascript
JavaScript变量声明var,let.const及区别浅析
2018/04/23 Javascript
vuex实现的简单购物车功能示例
2019/02/13 Javascript
Element Collapse 折叠面板的使用方法
2020/07/26 Javascript
[02:09]DOTA2辉夜杯 EHOME夺冠举杯现场
2015/12/28 DOTA
Python实现的Google IP 可用性检测脚本
2015/04/23 Python
python 二维数组90度旋转的方法
2019/01/28 Python
python如何从文件读取数据及解析
2019/09/19 Python
python中property和setter装饰器用法
2019/12/19 Python
基于 Python 实践感知器分类算法
2021/01/07 Python
Python结合百度语音识别实现实时翻译软件的实现
2021/01/18 Python
css3个性化字体_动力节点Java学院整理
2017/07/12 HTML / CSS
Canvas实现保存图片到本地的示例代码
2018/06/28 HTML / CSS
高级运动鞋:GREATS
2019/07/19 全球购物
培训主管的岗位职责
2013/11/23 职场文书
大学生实习自我鉴定
2013/12/11 职场文书
2014年师德师风学习材料
2014/05/16 职场文书
《窃读记》教学反思
2016/02/18 职场文书
表扬信范文
2019/04/22 职场文书
MySQL CHAR和VARCHAR该如何选择
2021/05/31 MySQL
Python常遇到的错误和异常
2021/11/02 Python
浅谈Redis 中的过期删除策略和内存淘汰机制
2022/04/03 Redis
详解apache编译安装httpd-2.4.54及三种风格的init程序特点和区别
2022/07/15 Servers