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实现SSH远程登陆,并执行命令的方法(分享)
May 08 Python
基于Linux系统中python matplotlib画图的中文显示问题的解决方法
Jun 15 Python
Python 12306抢火车票脚本 Python京东抢手机脚本
Feb 06 Python
Python 实现12306登录功能实例代码
Feb 09 Python
Python3实现转换Image图片格式
Jun 21 Python
浅析python继承与多重继承
Sep 13 Python
python lxml中etree的简单应用
May 10 Python
python动态进度条的实现代码
Jul 03 Python
python实现切割url得到域名、协议、主机名等各个字段的例子
Jul 25 Python
python shell命令行中import多层目录下的模块操作
Mar 09 Python
Pycharm pyuic5实现将ui文件转为py文件,让UI界面成功显示
Apr 08 Python
解决pytorch读取自制数据集出现过的问题
May 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中sql注入漏洞示例 sql注入漏洞修复
2014/01/24 PHP
php实现信用卡校验位算法THE LUHN MOD-10示例
2014/05/07 PHP
基于OpenCart 开发支付宝,财付通,微信支付参数错误问题
2015/10/01 PHP
php通过两层过滤获取留言内容的方法
2016/07/11 PHP
PHP Mysqli 常用代码集合
2016/11/12 PHP
Js切换功能的简单方法
2010/11/23 Javascript
nodejs命令行参数处理模块commander使用实例
2014/09/17 NodeJs
ECMAScript6函数默认参数
2015/06/12 Javascript
jQuery实现向下滑出的二级菜单效果实例
2015/08/22 Javascript
javascript实现下雪效果【实例代码】
2016/05/03 Javascript
D3.js实现饼状图的方法详解
2016/09/21 Javascript
AngularJS表单提交实例详解
2017/02/18 Javascript
JavaScript设计模式之单例模式原理与用法实例分析
2018/07/26 Javascript
JS实现的Object数组去重功能示例【数组成员为Object对象】
2019/02/01 Javascript
vue使用lodop打印控件实现浏览器兼容打印的方法
2021/02/07 Vue.js
[16:14]教你分分钟做大人:米拉娜(HEROS)
2014/11/24 DOTA
使用Python标准库中的wave模块绘制乐谱的简单教程
2015/03/30 Python
Ruby元编程基础学习笔记整理
2016/07/02 Python
python3+PyQt5实现使用剪贴板做复制与粘帖示例
2017/01/24 Python
matplotlib设置legend图例代码示例
2017/12/19 Python
win7+Python3.5下scrapy的安装方法
2018/07/31 Python
Python如何使用k-means方法将列表中相似的句子归类
2019/08/08 Python
django列表筛选功能的实现代码
2020/03/27 Python
解决pyPdf和pyPdf2在合并pdf时出现异常的问题
2020/04/03 Python
python遍历路径破解表单的示例
2020/11/21 Python
英国知名奢侈品包包品牌:Milli Millu
2016/12/22 全球购物
英国老牌潮鞋店:Offspring
2019/08/19 全球购物
消防先进事迹材料
2014/02/10 职场文书
公司联欢晚会主持词
2014/03/22 职场文书
校园安全演讲稿
2014/05/09 职场文书
教育系统干部作风整顿心得体会
2014/09/09 职场文书
党的群众路线教育实践活动查摆问题自查报告
2014/10/10 职场文书
2014年节能降耗工作总结
2014/12/11 职场文书
2014年机关工会工作总结
2014/12/19 职场文书
借条格式范本
2015/05/25 职场文书
毕业论文答辩稿范文
2015/06/23 职场文书