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的pip安装以及使用教程
Sep 18 Python
Python基于plotly模块实现的画图操作示例
Jan 23 Python
Django实现学生管理系统
Feb 26 Python
python集合是否可变总结
Jun 20 Python
利用python numpy+matplotlib绘制股票k线图的方法
Jun 26 Python
如何用Python破解wifi密码过程详解
Jul 12 Python
Python 字符串类型列表转换成真正列表类型过程解析
Aug 26 Python
详解Python3定时器任务代码
Sep 23 Python
Python递归调用实现数字累加的代码
Feb 25 Python
python可以用哪些数据库
Jun 22 Python
python 如何引入协程和原理分析
Nov 30 Python
Python3.9.0 a1安装pygame出错解决全过程(小结)
Feb 02 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
BBS(php & mysql)完整版(六)
2006/10/09 PHP
phpmyadmin里面导入sql语句格式的大量数据的方法
2010/06/05 PHP
php中拷贝构造函数、赋值运算符重载
2012/07/25 PHP
php读取txt文件组成SQL并插入数据库的代码(原创自Zjmainstay)
2012/07/31 PHP
php使HTML标签自动补全闭合函数代码
2012/10/04 PHP
使用swoole扩展php websocket示例
2014/02/13 PHP
优化WordPress的Google字体以加速国内服务器上的运行
2015/11/24 PHP
NiftyCube——轻松实现圆角边框
2007/02/20 Javascript
JavaScript Archive Network 集合
2007/05/12 Javascript
javascript学习笔记(十) js对象 继承
2012/06/19 Javascript
JS的replace方法介绍
2012/10/20 Javascript
文字不间断滚动(上下左右)实例代码
2013/04/21 Javascript
jQuery找出网页上最高元素的方法
2015/03/20 Javascript
初步认识JavaScript函数库jQuery
2015/06/18 Javascript
初步使用Node连接Mysql数据库
2016/03/03 Javascript
正则表达式,替换所有HTML标签的简单实例
2016/11/28 Javascript
详解handlebars+require基本使用方法
2016/12/21 Javascript
JS获取一个表单字段中多条数据并转化为json格式
2017/10/17 Javascript
JavaScript实现的滚动公告特效【基于jQuery】
2019/07/10 jQuery
[35:29]Secret vs VG 2018国际邀请赛淘汰赛BO3 第三场 8.23
2018/08/24 DOTA
python 内置函数filter
2017/06/01 Python
Python基于最小二乘法实现曲线拟合示例
2018/06/14 Python
利用python对Excel中的特定数据提取并写入新表的方法
2018/06/14 Python
python 删除字符串中连续多个空格并保留一个的方法
2018/12/22 Python
python实现石头剪刀布程序
2021/01/20 Python
pytorch制作自己的LMDB数据操作示例
2019/12/18 Python
Python有参函数使用代码实例
2020/01/06 Python
Python tkinter实现日期选择器
2021/02/22 Python
周生生珠宝香港官网:Chow Sang Sang(香港及海外配送)
2019/09/05 全球购物
销售人员职业生涯规划范文
2014/03/01 职场文书
师德模范事迹材料
2014/06/03 职场文书
2014年护士工作总结范文
2014/11/11 职场文书
学期个人工作总结
2015/02/13 职场文书
幼儿园大班个人总结
2015/02/28 职场文书
孟佩杰观后感
2015/06/17 职场文书
python中24小时制转换为12小时制的方法
2021/06/18 Python