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求两个list的差集、交集与并集的方法
Nov 01 Python
Python中使用异常处理来判断运行的操作系统平台方法
Jan 22 Python
python2.7 json 转换日期的处理的示例
Mar 07 Python
解决Python 爬虫URL中存在中文或特殊符号无法请求的问题
May 11 Python
Python实现数据可视化看如何监控你的爬虫状态【推荐】
Aug 10 Python
使用python获取电脑的磁盘信息方法
Nov 01 Python
关于pandas的离散化,面元划分详解
Nov 22 Python
Python continue语句实例用法
Feb 06 Python
matlab中imadjust函数的作用及应用举例
Feb 27 Python
Python reversed函数及使用方法解析
Mar 17 Python
快速了解Python开发环境Spyder
Jun 29 Python
Python实现JS解密并爬取某音漫客网站
Oct 23 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
php调用nginx的mod_zip模块打包ZIP文件
2014/06/11 PHP
针对多用户实现头像上传功能PHP代码 适用于登陆页面制作
2016/08/17 PHP
利用php-cli和任务计划实现订单同步功能的方法
2017/05/03 PHP
在云虚拟主机部署thinkphp5项目的步骤详解
2017/12/21 PHP
jQuery之$(document).ready()使用介绍
2012/04/05 Javascript
jquery实现滑动图片自己测试的例子
2013/11/05 Javascript
浅析Js中的单引号与双引号问题
2013/11/06 Javascript
Angularjs基础知识及示例汇总
2015/01/22 Javascript
AngularJS单选框及多选框实现双向动态绑定
2016/01/13 Javascript
10个最优秀的Node.js MVC框架
2017/08/24 Javascript
详解vue组件基础
2018/05/04 Javascript
Vue实现用户自定义字段显示数据的方法
2018/08/28 Javascript
Three.js中矩阵和向量的使用教程
2019/03/19 Javascript
Vue.js组件使用props传递数据的方法
2019/10/19 Javascript
小程序中的箭头函数的具体使用
2020/06/19 Javascript
简单介绍Python的Django框架的dj-scaffold项目
2015/05/30 Python
使用PyCharm配合部署Python的Django框架的配置纪实
2015/11/19 Python
Python正则表达式完全指南
2017/05/25 Python
对Django项目中的ORM映射与模糊查询的使用详解
2019/07/18 Python
Python操作qml对象过程详解
2019/09/26 Python
django数据模型on_delete, db_constraint的使用详解
2019/12/24 Python
python爬取王者荣耀全皮肤的简单实现代码
2020/01/31 Python
Python流程控制语句的深入讲解
2020/06/15 Python
python实现每天自动签到领积分的示例代码
2020/08/18 Python
世界上最好的精品店:Shoptiques
2018/02/05 全球购物
什么叫应用程序域?什么是受管制的代码?什么是强类型系统?什么是装箱和拆箱?
2016/08/13 面试题
环境科学专业个人求职的自我评价
2013/11/28 职场文书
法学个人求职信范文
2014/01/27 职场文书
毕业生大学生活自我总结
2014/01/31 职场文书
办公设备采购方案
2014/03/16 职场文书
宣传活动总结范文
2014/07/01 职场文书
我为党旗添光彩演讲稿
2014/09/13 职场文书
2015年员工试用期工作总结
2014/12/12 职场文书
公司晚会主持词
2019/04/17 职场文书
零基础学java之方法的定义与调用详解
2022/04/10 Java/Android
使用python绘制分组对比柱状图
2022/04/21 Python