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重新引入被覆盖的自带function
Jul 16 Python
为Python的Tornado框架配置使用Jinja2模板引擎的方法
Jun 30 Python
Python升级导致yum、pip报错的解决方法
Sep 06 Python
python 实现对文件夹内的文件排序编号
Apr 12 Python
解决python爬虫中有中文的url问题
May 11 Python
Python实现朴素贝叶斯分类器的方法详解
Jul 04 Python
Python代码打开本地.mp4格式文件的方法
Jan 03 Python
Python实现批量执行同目录下的py文件方法
Jan 11 Python
python SocketServer源码深入解读
Sep 17 Python
python应用Axes3D绘图(批量梯度下降算法)
Mar 25 Python
python 实现表情识别
Nov 21 Python
python实现代码审查自动回复消息
Feb 01 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邮件发送类PHPMailer用法实例详解
2014/09/22 PHP
JS 拼图游戏 面向对象,注释完整。
2009/06/18 Javascript
JavaScript 组件之旅(二)编码实现和算法
2009/10/28 Javascript
js+css使DIV始终居于屏幕中间 左下 左上 右上 右下的代码集合
2011/03/10 Javascript
20个非常棒的 jQuery 幻灯片插件和教程分享
2011/08/23 Javascript
JS实现淘宝幻灯片效果的实现方法
2013/03/22 Javascript
javaScript(JS)替换节点实现思路介绍
2013/04/17 Javascript
纯JS实现根据CSS的class选择DOM
2014/03/22 Javascript
解决JS无法调用Controller问题的方法
2015/12/31 Javascript
JS树形菜单组件Bootstrap TreeView使用方法详解
2016/12/21 Javascript
微信小程序侧边栏滑动特效(左右滑动)
2017/01/23 Javascript
正则表达式基本语法及表单验证操作详解【基于JS】
2017/04/07 Javascript
微信小程序获取循环元素id以及wx.login登录操作
2017/08/17 Javascript
webpack公共组件引用路径简化小技巧
2018/06/15 Javascript
JS canvas绘制五子棋的棋盘
2020/05/28 Javascript
Vue 组件封装 并使用 NPM 发布的教程
2018/09/30 Javascript
JavaScript如何实现监听键盘输入和鼠标监点击
2020/07/20 Javascript
Mac下Supervisor进程监控管理工具的安装与配置
2014/12/16 Python
python使用super()出现错误解决办法
2017/08/14 Python
python虚拟环境virtualenv的安装与使用
2017/09/21 Python
Python多进程与服务器并发原理及用法实例分析
2018/08/21 Python
利用selenium爬虫抓取数据的基础教程
2019/06/10 Python
Python read函数按字节(字符)读取文件的实现
2019/07/03 Python
python基础 range的用法解析
2019/08/23 Python
给你一面国旗 教你用python画中国国旗
2019/09/24 Python
python创建子类的方法分析
2019/11/28 Python
Python使用ElementTree美化XML格式的操作
2020/03/06 Python
python的pip有什么用
2020/06/17 Python
森海塞尔美国官网:Sennheiser耳机与耳麦
2017/07/19 全球购物
化学学院毕业生自荐信范文
2013/12/17 职场文书
中学劳技课教师的自我评价
2014/02/05 职场文书
租房协议书
2014/04/10 职场文书
妈妈活动方案
2014/08/15 职场文书
2015年大学生党员承诺书
2015/04/27 职场文书
难以忽视的真相观后感
2015/06/05 职场文书
MySQL连接控制插件介绍
2021/09/25 MySQL