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 base64编码解码实例
Jun 21 Python
python开发之thread实现布朗运动的方法
Nov 11 Python
详解python发送各类邮件的主要方法
Dec 22 Python
python生成二维码的实例详解
Oct 29 Python
Python算法输出1-9数组形成的结果为100的所有运算式
Nov 03 Python
Django视图和URL配置详解
Jan 31 Python
python实现简单tftp(基于udp协议)
Jul 30 Python
opencv3/C++实现视频背景去除建模(BSM)
Dec 11 Python
Python3.7+tkinter实现查询界面功能
Dec 24 Python
python适合做数据挖掘吗
Jun 16 Python
Anaconda的安装与虚拟环境建立
Nov 18 Python
python爬虫判断招聘信息是否存在的实例代码
Nov 20 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的源码中深入了解stdClass类
2014/04/18 PHP
PHP判断是否是微信打开,浏览器打开的方法
2018/03/14 PHP
javascript十个最常用的自定义函数(中文版)
2009/09/07 Javascript
JS getAttribute和setAttribute(取得和设置属性)的使用介绍
2013/07/10 Javascript
使用js对select动态添加和删除OPTION示例代码
2013/08/12 Javascript
三种检测iPhone/iPad设备方向的方法
2014/04/23 Javascript
javascript中var的重要性分析
2015/02/11 Javascript
JavaScript中用于生成随机数的Math.random()方法
2015/06/15 Javascript
13个PHP函数超实用
2015/10/21 Javascript
jQuery侧边栏实现代码
2016/05/06 Javascript
javascript和jQuery实现网页实时聊天的ajax长轮询
2016/07/20 Javascript
深入浅析search 搜索框的写法
2016/08/02 Javascript
bootstrap table 数据表格行内修改的实现代码
2017/02/13 Javascript
jQuery插件echarts去掉垂直网格线用法示例
2017/03/03 Javascript
JS中的三个循环小结
2017/06/20 Javascript
基于JavaScript中字符串的match与replace方法(详解)
2017/12/04 Javascript
vue组件jsx语法的具体使用
2018/05/21 Javascript
Node.js+ELK日志规范的实现
2019/05/23 Javascript
用Python编写一个简单的FUSE文件系统的教程
2015/04/02 Python
python使用calendar输出指定年份全年日历的方法
2015/04/04 Python
Python连接Redis的基本配置方法
2018/09/13 Python
Python 调用 zabbix api的方法示例
2019/01/06 Python
Python构建图像分类识别器的方法
2019/01/12 Python
余弦相似性计算及python代码实现过程解析
2019/09/18 Python
pandas read_excel()和to_excel()函数解析
2019/09/19 Python
python实现单目标、多目标、多尺度、自定义特征的KCF跟踪算法(实例代码)
2020/01/08 Python
tensorflow 模型权重导出实例
2020/01/24 Python
Python版中国省市经纬度
2020/02/11 Python
如何在python中执行另一个py文件
2020/04/30 Python
Python通过字典映射函数实现switch
2020/11/06 Python
澳大利亚首屈一指的在线购物目的地:Kogan.com
2017/02/02 全球购物
微软中国官方旗舰店:销售Surface、Xbox One、笔记本电脑、Office
2018/07/23 全球购物
介绍一下内联、左联、右联
2013/12/31 面试题
电脑售后服务承诺书
2014/03/27 职场文书
党支部2014年度工作总结
2014/12/04 职场文书
python缺失值的解决方法总结
2021/06/09 Python