Pandas 解决dataframe的一列进行向下顺移问题

 更新时间:2019年12月27日 10:09:48   作者:yyhhlancelot  
今天小编就为大家分享一篇Pandas 解决dataframe的一列进行向下顺移问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

最近做比赛,有时候需要造出新的特征,而这次遇到的问题是将一列数据往下顺移一位。同时将开头缺失的那一个数据用其他方式填充。

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中函数相关的变量作用域

    这篇文章主要介绍了Python中函数相关的变量作用域,变量的作用域是指程序代码能够访问该变量的区域,如果超出该区域,在访问时就会出现错误,需要的朋友可以参考下
    2023-08-08
  • Pytest mark使用实例及原理解析

    Pytest mark使用实例及原理解析

    这篇文章主要介绍了Pytest mark使用实例及原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • Python报错NameError: name ‘secrets‘ is not defined解决

    Python报错NameError: name ‘secrets‘ is not

    在使用Python进行安全编程时,我们经常需要使用secrets模块来生成安全的随机数,但是却遇到这个问题,本文主要介绍了Python报错NameError: name ‘secrets‘ is not defined解决,感兴趣的可以了解一下
    2024-06-06
  • 在Django中使用Sitemap的方法讲解

    在Django中使用Sitemap的方法讲解

    这篇文章主要介绍了在Django中使用Sitemap的方法讲解,Django是最具人气的Python web开发框架,需要的朋友可以参考下
    2015-07-07
  • python环境变量配置流程

    python环境变量配置流程

    这篇文章主要为大家介绍了python环境变量配置流程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-02-02
  • Python面向对象编程之类的封装

    Python面向对象编程之类的封装

    这篇文章主要介绍了Python面向对象编程之类的封装封装指属性和方法的抽象,属性的抽象又指对类的属性进行定义、隔离和保护,下面来看看文章的具体内容吧,需要的朋友可以参考一下,希望对你有所帮助
    2021-11-11
  • Python pandas遍历行数据的2种方法小结

    Python pandas遍历行数据的2种方法小结

    pandas在数据处理过程中,除了对整列字段进行处理之外,有时还需求对每一行进行遍历,本文就来介绍Python pandas遍历行数据的2种方法小结,感兴趣的可以了解一下
    2024-03-03
  • python绘制中国大陆人口热力图

    python绘制中国大陆人口热力图

    这篇文章主要为大家详细介绍了Python绘制中国大陆人口热力图,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-11-11
  • python用opencv 图像傅里叶变换

    python用opencv 图像傅里叶变换

    这篇文章主要介绍了python用opencv 图像傅里叶变换的方法,帮助大家更好的利用python处理图片,感兴趣的朋友可以了解下
    2021-01-01
  • python3使用logging包,如何把日志写到系统的rsyslog中

    python3使用logging包,如何把日志写到系统的rsyslog中

    这篇文章主要介绍了python3使用logging包,如何把日志写到系统的rsyslog中的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09

最新评论