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用fork来创建子进程注意事项
Jul 03 Python
Python接收Gmail新邮件并发送到gtalk的方法
Mar 10 Python
Python使用正则匹配实现抓图代码分享
Apr 02 Python
python复制与引用用法分析
Apr 08 Python
Python代码块批量添加Tab缩进的方法
Jun 25 Python
python整小时 整天时间戳获取算法示例
Feb 20 Python
django的ORM操作 增加和查询
Jul 26 Python
Python logging设置和logger解析
Aug 28 Python
查看端口并杀进程python脚本代码
Dec 17 Python
Python导入模块包原理及相关注意事项
Mar 25 Python
Django实现任意文件上传(最简单的方法)
Jun 03 Python
一些关于python 装饰器的个人理解
Aug 31 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与javascript的两种交互方式
2006/10/09 PHP
php运行出现Call to undefined function curl_init()的解决方法
2010/11/02 PHP
PHP获取表单所有复选框的值的方法
2014/08/28 PHP
php实现表单多按钮提交action的处理方法
2015/10/24 PHP
php用户注册信息验证正则表达式
2015/11/12 PHP
php mailer类调用远程SMTP服务器发送邮件实现方法
2016/03/04 PHP
灵活应用js调试技巧解决样式问题的步骤分享
2012/03/15 Javascript
JavaScript mapreduce工作原理简析
2012/11/25 Javascript
jquery和javascript的区别(常用方法比较)
2013/07/04 Javascript
9行javascript代码获取QQ群成员具体实现
2013/10/16 Javascript
JavaScript事件委托的技术原理探讨示例
2014/04/17 Javascript
常见浏览器多长时间会提示“脚本运行时间过长”总结
2014/04/29 Javascript
jquery实现动态画圆
2014/12/04 Javascript
JavaScript模拟可展开、拖动与关闭的聊天窗口实例
2015/05/12 Javascript
JavaScript中switch语句的用法详解
2015/06/03 Javascript
JS实现对中文字符串进行utf-8的Base64编码的方法(使其与Java编码相同)
2016/06/21 Javascript
JavaScript ES6中export、import与export default的用法和区别
2017/03/14 Javascript
JS实现网页抢购功能(触发,终止脚本)
2017/11/27 Javascript
vue登录注册及token验证实现代码
2017/12/14 Javascript
浅谈vue 单文件探索
2018/09/05 Javascript
vuejs中父子组件之间通信方法实例详解
2020/01/17 Javascript
python时间整形转标准格式的示例分享
2014/02/14 Python
Python图像灰度变换及图像数组操作
2016/01/27 Python
举例讲解Python面向对象编程中类的继承
2016/06/17 Python
django 通过ajax完成邮箱用户注册、激活账号的方法
2018/04/17 Python
使用tensorflow实现线性回归
2018/09/08 Python
python实现门限回归方式
2020/02/29 Python
python 轮询执行某函数的2种方式
2020/05/03 Python
html5 touch事件实现触屏页面上下滑动(一)
2016/03/10 HTML / CSS
斯洛伐克最大的婴儿食品和用品网上商店:Feedo.sk
2020/12/21 全球购物
解释一下Windows的消息机制
2014/01/30 面试题
计生工作先进事迹
2014/08/15 职场文书
教师党员先进性教育自我剖析材料思想汇报
2014/09/24 职场文书
羊脂球读书笔记
2015/06/30 职场文书
java设计模式--七大原则详解
2021/07/21 Java/Android
SpringBoot整合RabbitMQ的5种模式实战
2021/08/02 Java/Android