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调用cmd复制文件代码分享
Dec 27 Python
python字符串加密解密的三种方法分享(base64 win32com)
Jan 19 Python
python实现的二叉树算法和kmp算法实例
Apr 25 Python
Python实现SMTP发送邮件详细教程
Mar 02 Python
Flask框架的学习指南之开发环境搭建
Nov 20 Python
python实现微信跳一跳辅助工具步骤详解
Jan 04 Python
Selenium的使用详解
Oct 19 Python
python 判断矩阵中每行非零个数的方法
Jan 26 Python
python基础梳理(一)(推荐)
Apr 06 Python
new_zeros() pytorch版本的转换方式
Feb 18 Python
详细分析Python可变对象和不可变对象
Jul 09 Python
详解用Python把PDF转为Word方法总结
Apr 27 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
MYSQL环境变量设置方法
2007/01/15 PHP
PHP无限分类代码,支持数组格式化、直接输出菜单两种方式
2011/05/18 PHP
解析php入库和出库
2013/06/25 PHP
php给图片加文字水印
2015/07/31 PHP
PHP学习记录之数组函数
2018/06/01 PHP
jQuery之end()和pushStack()使用介绍
2012/02/07 Javascript
jquery拖动插件(jquery.drag)使用介绍
2013/06/18 Javascript
让图片跳跃起来  javascript图片轮播特效
2016/02/16 Javascript
JS如何设置cookie有效期为当天24点并弹出欢迎登陆界面
2016/08/04 Javascript
JS实现兼容火狐及IE iframe onload属性的遮罩层隐藏及显示效果
2016/08/23 Javascript
Bootstrap 3.x打印预览背景色与文字显示异常的解决
2016/11/06 Javascript
整理关于Bootstrap模态弹出框的慕课笔记
2017/03/29 Javascript
详解用vue.js和laravel实现微信授权登陆
2017/06/23 Javascript
JavaScript仿微信(电话)联系人列表滑动字母索引实例讲解(推荐)
2017/08/16 Javascript
webpack 处理CSS资源的实现
2019/09/27 Javascript
浅谈在vue-cli3项目中解决动态引入图片img404的问题
2020/08/04 Javascript
Vue+Bootstrap实现简易学生管理系统
2021/02/09 Vue.js
Python运行的17个时新手常见错误小结
2012/08/07 Python
matplotlib.pyplot画图 图片的二进制流的获取方法
2018/05/24 Python
使用EduBlock轻松学习Python编程
2018/10/08 Python
Django objects的查询结果转化为json的三种方式的方法
2018/11/07 Python
Python读取csv文件分隔符设置方法
2019/01/14 Python
pyqt5中QThread在使用时出现重复emit的实例
2019/06/21 Python
python爬虫 Pyppeteer使用方法解析
2019/09/28 Python
SELENIUM自动化模拟键盘快捷键操作实现解析
2019/10/28 Python
Python3 main函数使用sys.argv传入多个参数的实现
2019/12/25 Python
Django 删除upload_to文件的步骤
2020/03/30 Python
Python3爬虫中识别图形验证码的实例讲解
2020/07/30 Python
Python绘制组合图的示例
2020/09/18 Python
雅诗兰黛旗下走天然植物路线的彩妆品牌:Prescriptives
2016/08/14 全球购物
潘多拉珠宝英国官方网上商店:PANDORA英国
2018/06/12 全球购物
回门宴父母答谢词
2014/01/26 职场文书
入党申请自荐书范文
2014/02/11 职场文书
好人好事事迹材料
2014/02/12 职场文书
环保宣传标语
2014/06/12 职场文书
2015年实习生工作总结报告
2015/04/28 职场文书