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天气预报采集器实现代码(网页爬虫)
Oct 07 Python
python list 合并连接字符串的方法
Mar 09 Python
python中urllib.unquote乱码的原因与解决方法
Apr 24 Python
Python定时器实例代码
Nov 01 Python
解决python使用open打开文件中文乱码的问题
Dec 29 Python
Python中实例化class的执行顺序示例详解
Oct 14 Python
Python3 读、写Excel文件的操作方法
Oct 20 Python
Python3.5运算符操作实例详解
Apr 25 Python
pandas 层次化索引的实现方法
Jul 06 Python
Python中低维数组填充高维数组的实现
Dec 02 Python
解决tensorflow打印tensor有省略号的问题
Feb 04 Python
IntelliJ 中配置 Anaconda的过程图解
Jun 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.NET的入门教程
2006/10/09 PHP
Yii框架引用插件和ckeditor中body与P标签去除的方法
2017/01/19 PHP
vmware linux系统安装最新的php7图解
2019/04/14 PHP
Yii框架自定义数据库操作组件示例
2019/11/11 PHP
PHP强制转化的形式整理
2020/05/22 PHP
PHP使用POP3读取邮箱接收邮件的示例代码
2020/07/08 PHP
用javascript控制iframe滚动的代码
2007/04/10 Javascript
jquery $.fn $.fx是什么意思有什么用
2013/11/04 Javascript
浅析XMLHttpRequest的缓存问题
2013/12/13 Javascript
jquery中change()用法实例分析
2015/02/06 Javascript
Javascript中typeof 用法小结
2015/05/12 Javascript
深入解读JavaScript中的Hoisting机制
2015/08/12 Javascript
jquery ajax双击div可直接修改div中的内容
2016/03/04 Javascript
Vue.js一个文件对应一个组件实践
2016/10/27 Javascript
JS前端笔试题分析
2016/12/19 Javascript
JavaScript数据结构之链表的实现
2017/03/19 Javascript
php中and 和 &&出坑指南
2018/07/13 Javascript
JavaScript函数、闭包、原型、面向对象学习笔记
2018/09/06 Javascript
使用localStorage替代cookie做本地存储
2019/09/25 Javascript
详解JS函数防抖
2020/06/05 Javascript
解决父组件将子组件作为弹窗调用只执行一次created的问题
2020/07/24 Javascript
javascript自定义加载loading效果
2020/09/15 Javascript
python自定义类并使用的方法
2015/05/07 Python
动态规划之矩阵连乘问题Python实现方法
2017/11/27 Python
Python selenium抓取微博内容的示例代码
2018/05/17 Python
Python之——生成动态路由轨迹图的实例
2019/11/22 Python
Python操作多维数组输出和矩阵运算示例
2019/11/28 Python
使用Keras实现简单线性回归模型操作
2020/06/12 Python
CSS3新属性transition-property transform box-shadow实例学习
2013/06/06 HTML / CSS
美国卡车、吉普车和SUV零件网站:4 Wheel Parts
2016/11/24 全球购物
纪委书记群众路线整改措施思想汇报
2014/10/09 职场文书
教师个人教学总结
2015/02/11 职场文书
一百条裙子读书笔记
2015/07/01 职场文书
导游词之广西漓江
2019/11/02 职场文书
nginx配置proxy_pass中url末尾带/与不带/的区别详解
2021/03/31 Servers
如何vue使用el-table遍历循环表头和表体数据
2022/04/26 Vue.js