python dataframe向下向上填充,fillna和ffill的方法


Posted in Python onNovember 28, 2018

首先新建一个dataframe:

In[8]: df = pd.DataFrame({'name':list('ABCDA'),'house':[1,1,2,3,3],'date':['2010-01-01','2010-06-09','2011-12-03','2011-04-05','2012-03-23']})
In[9]: df
Out[9]: 
   date house name
0 2010-01-01  1 A
1 2010-06-09  1 B
2 2011-12-03  2 C
3 2011-04-05  3 D
4 2012-03-23  3 A

将date列改为时间类型:

In[12]: df.date = pd.to_datetime(df.date)

数据的含义是这样的,我们有ABCD四个人的数据,已知A在2010-01-01的时候,名下有1套房,B在2010-06-09的时候,名下有1套房,C在2011-12-03的时候,有2套房,D在2011-04-05的时候有3套房,A在2012-02-23的时候,数据更新了,有两套房。

要求在有姓名和时间的情况下,能给出其名下有几套房:

比如A在2010-01-01与2012-03-23期间任意一天,都应该是1套房,在2012-03-23之后,都是3套房。

我们使用pandas的fillna方法,选择ffill。

首先我们获得一个2010-01-01到2017-12-01的dataframe

In[14]: time_range = pd.DataFrame(
 pd.date_range('2010-01-01','2017-12-01',freq='D'), columns=['date']).set_index("date")
In[15]: time_range
Out[15]: 
Empty DataFrame
Columns: []
Index: [2010-01-01 00:00:00, 2010-01-02 00:00:00, 2010-01-03 00:00:00, 2010-01-04 00:00:00, 2010-01-05 00:00:00, 2010-01-06 00:00:00, 2010-01-07 00:00:00, 2010-01-08 00:00:00, 2010-01-09 00:00:00, 2010-01-10 00:00:00, 2010-01-11 00:00:00, 2010-01-12 00:00:00, 2010-01-13 00:00:00, 2010-01-14 00:00:00, 2010-01-15 00:00:00, 2010-01-16 00:00:00, 2010-01-17 00:00:00, 2010-01-18 00:00:00, 2010-01-19 00:00:00, 2010-01-20 00:00:00, 2010-01-21 00:00:00, 2010-01-22 00:00:00, 2010-01-23 00:00:00, 2010-01-24 00:00:00, 2010-01-25 00:00:00, 2010-01-26 00:00:00, 2010-01-27 00:00:00, 2010-01-28 00:00:00, 2010-01-29 00:00:00, 2010-01-30 00:00:00, 2010-01-31 00:00:00, 2010-02-01 00:00:00, 2010-02-02 00:00:00, 2010-02-03 00:00:00, 2010-02-04 00:00:00, 2010-02-05 00:00:00, 2010-02-06 00:00:00, 2010-02-07 00:00:00, 2010-02-08 00:00:00, 2010-02-09 00:00:00, 2010-02-10 00:00:00, 2010-02-11 00:00:00, 2010-02-12 00:00:00, 2010-02-13 00:00:00, 2010-02-14 00:00:00, 2010-02-15 00:00:00, 2010-02-16 00:00:00, 2010-02-17 00:00:00, 2010-02-18 00:00:00, 2010-02-19 00:00:00, 2010-02-20 00:00:00, 2010-02-21 00:00:00, 2010-02-22 00:00:00, 2010-02-23 00:00:00, 2010-02-24 00:00:00, 2010-02-25 00:00:00, 2010-02-26 00:00:00, 2010-02-27 00:00:00, 2010-02-28 00:00:00, 2010-03-01 00:00:00, 2010-03-02 00:00:00, 2010-03-03 00:00:00, 2010-03-04 00:00:00, 2010-03-05 00:00:00, 2010-03-06 00:00:00, 2010-03-07 00:00:00, 2010-03-08 00:00:00, 2010-03-09 00:00:00, 2010-03-10 00:00:00, 2010-03-11 00:00:00, 2010-03-12 00:00:00, 2010-03-13 00:00:00, 2010-03-14 00:00:00, 2010-03-15 00:00:00, 2010-03-16 00:00:00, 2010-03-17 00:00:00, 2010-03-18 00:00:00, 2010-03-19 00:00:00, 2010-03-20 00:00:00, 2010-03-21 00:00:00, 2010-03-22 00:00:00, 2010-03-23 00:00:00, 2010-03-24 00:00:00, 2010-03-25 00:00:00, 2010-03-26 00:00:00, 2010-03-27 00:00:00, 2010-03-28 00:00:00, 2010-03-29 00:00:00, 2010-03-30 00:00:00, 2010-03-31 00:00:00, 2010-04-01 00:00:00, 2010-04-02 00:00:00, 2010-04-03 00:00:00, 2010-04-04 00:00:00, 2010-04-05 00:00:00, 2010-04-06 00:00:00, 2010-04-07 00:00:00, 2010-04-08 00:00:00, 2010-04-09 00:00:00, 2010-04-10 00:00:00, ...]
 
[2892 rows x 0 columns]

然后用上上篇博客中提到的pivot_table将原本的df转变之后,与time_range进行merger操作。

In[16]: df = pd.pivot_table(df, columns='name', index='date')
 
In[17]: df
Out[17]: 
   house    
name   A B C D
date       
2010-01-01 1.0 NaN NaN NaN
2010-06-09 NaN 1.0 NaN NaN
2011-04-05 NaN NaN NaN 3.0
2011-12-03 NaN NaN 2.0 NaN
2012-03-23 3.0 NaN NaN NaN
In[18]: df = df.merge(time_range,how="right", left_index=True, right_index=True)

然后再进行向下填充操作:

In[20]: df = df.fillna(method='ffill')

最后:

df = df.stack().reset_index()

结果太长,这里就不粘贴了。如果想向上填充,可选择method = 'bfill‘

以上这篇python dataframe向下向上填充,fillna和ffill的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python collections模块实例讲解
Apr 07 Python
Python入门篇之函数
Oct 20 Python
python中os和sys模块的区别与常用方法总结
Nov 14 Python
python with提前退出遇到的坑与解决方案
Jan 05 Python
Django外键(ForeignKey)操作以及related_name的作用详解
Jul 29 Python
Python While循环语句实例演示及原理解析
Jan 03 Python
Pytorch maxpool的ceil_mode用法
Feb 18 Python
TensorFlow使用Graph的基本操作的实现
Apr 22 Python
opencv 图像轮廓的实现示例
Jul 08 Python
python 爬取英雄联盟皮肤并下载的示例
Dec 04 Python
使用pandas实现筛选出指定列值所对应的行
Dec 13 Python
如何用Python徒手写线性回归
Jan 25 Python
在python中只选取列表中某一纵列的方法
Nov 28 #Python
手把手教你如何安装Pycharm(详细图文教程)
Nov 28 #Python
python 使用re.search()筛选后 选取部分结果的方法
Nov 28 #Python
Python读取excel指定列生成指定sql脚本的方法
Nov 28 #Python
Python从Excel中读取日期一列的方法
Nov 28 #Python
pandas使用apply多列生成一列数据的实例
Nov 28 #Python
pandas通过loc生成新的列方法
Nov 28 #Python
You might like
在JavaScript中调用php程序
2009/03/09 PHP
非常好用的两个PHP函数 serialize()和unserialize()
2012/02/04 PHP
用来解析.htpasswd文件的PHP类
2012/09/05 PHP
PHP读取mssql json数据中文乱码的解决办法
2016/04/11 PHP
PHP读取XML格式文件的方法总结
2017/02/27 PHP
面向对象Javascript核心支持代码分享
2012/05/23 Javascript
Js与Jq获取浏览器和对象值的方法
2016/03/18 Javascript
关于原生js中bind函数的简单实现
2016/08/10 Javascript
JavaScript对象创建模式实例汇总
2016/10/03 Javascript
JavaScript中利用构造器函数模拟类的方法
2017/02/16 Javascript
利用Vue.js框架实现火车票查询系统(附源码)
2017/02/27 Javascript
Vue + Webpack + Vue-loader学习教程之功能介绍篇
2017/03/14 Javascript
vue通过cookie获取用户登录信息的思路详解
2018/10/30 Javascript
Ant Design Pro 下实现文件下载的实现代码
2019/12/03 Javascript
原生JS与JQ获取元素的区别详解
2020/02/13 Javascript
[58:32]EG vs Liquid 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python插入排序算法实例分析
2015/07/03 Python
Python 操作MySQL详解及实例
2017/04/30 Python
Python实现通过继承覆盖方法示例
2018/07/02 Python
Python中的单行、多行、中文注释方法
2018/07/19 Python
Python3.5文件读与写操作经典实例详解
2019/05/01 Python
Python应用领域和就业形势分析总结
2019/05/14 Python
Pyqt5 实现跳转界面并关闭当前界面的方法
2019/06/19 Python
利用python计算windows全盘文件md5值的脚本
2019/07/27 Python
浅谈pytorch grad_fn以及权重梯度不更新的问题
2019/08/20 Python
python一些性能分析的技巧
2020/08/30 Python
Staples英国官方网站:办公用品一站式采购
2017/10/06 全球购物
澳大利亚UGG工厂直销:Australian Ugg Boots
2017/10/14 全球购物
Orvis官网:自1856年以来,优质服装、飞钓装备等
2018/12/17 全球购物
生物技术专业毕业生求职信范文
2013/12/14 职场文书
捐书寄语赠言
2014/01/18 职场文书
食品安全承诺书
2014/05/22 职场文书
工作散漫检讨书
2014/09/16 职场文书
建筑横幅标语
2014/10/09 职场文书
青岛海底世界导游词
2015/02/11 职场文书
使用python将HTML转换为PDF pdfkit包(wkhtmltopdf) 的使用方法
2022/04/21 Python