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中的hashlib和base64加密模块使用实例
Sep 02 Python
python数组复制拷贝的实现方法
Jun 09 Python
python实现DES加密解密方法实例详解
Jun 30 Python
python flask 多对多表查询功能
Jun 25 Python
PyQt QListWidget修改列表项item的行高方法
Jun 20 Python
python中resample函数实现重采样和降采样代码
Feb 25 Python
python爬虫开发之urllib模块详细使用方法与实例全解
Mar 09 Python
PyTorch中torch.tensor与torch.Tensor的区别详解
May 18 Python
Python 通过正则表达式快速获取电影的下载地址
Aug 17 Python
Docker如何部署Python项目的实现详解
Oct 26 Python
python 实现逻辑回归
Dec 30 Python
Python Matplotlib绘制两个Y轴图像
Apr 13 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
ThinkPHP中数据操作案例分析
2015/09/27 PHP
PHP中模拟链表和链表的基本操作示例
2016/02/27 PHP
解析WordPress中控制用户登陆和判断用户登陆的PHP函数
2016/03/01 PHP
php下的原生ajax请求用法实例分析
2020/02/28 PHP
JavaScript初学者需要了解10个小技巧
2010/08/25 Javascript
手把手教你自己写一个js表单验证框架的方法
2010/09/14 Javascript
JQuery的$命名冲突详细解析
2013/12/28 Javascript
jQuery处理json数据返回数组和输出的方法
2015/03/11 Javascript
JS实现简洁、全兼容的拖动层实例
2015/05/13 Javascript
Javascript中的作用域和上下文深入理解
2015/07/03 Javascript
详解JavaScript中的构造器Constructor模式
2016/01/14 Javascript
实例讲解jQuery EasyUI tree中state属性慎用
2016/04/01 Javascript
js实现String.Fomat的实例代码
2016/09/02 Javascript
利用jQuery对无序列表排序的简单方法
2016/10/16 Javascript
浅析vue component 组件使用
2017/03/06 Javascript
vue父组件通过props如何向子组件传递方法详解
2017/08/16 Javascript
jQuery模拟12306城市选择框功能简单实现方法示例
2018/08/13 jQuery
Vue实现导航栏的显示开关控制
2019/11/01 Javascript
[59:00]OG vs TNC 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
python基础教程之元组操作使用详解
2014/03/25 Python
Python下的twisted框架入门指引
2015/04/15 Python
Python 实现在文件中的每一行添加一个逗号
2018/04/29 Python
浅析python参数的知识点
2018/12/10 Python
Django之模型层多表操作的实现
2019/01/08 Python
Python OOP类中的几种函数或方法总结
2019/02/22 Python
使用python实现多维数据降维操作
2020/02/24 Python
详解Python+Selenium+ChromeDriver的配置和问题解决
2021/01/19 Python
详解HTML5中download属性的应用
2015/08/06 HTML / CSS
努比亚手机官网:nubia
2016/10/06 全球购物
adidas官方旗舰店:德国运动用品制造商
2017/11/25 全球购物
Ellesse英国官网:意大利高级运动品牌
2019/07/23 全球购物
学习心得体会
2014/01/01 职场文书
2014年客服工作总结范文
2014/11/13 职场文书
Python常遇到的错误和异常
2021/11/02 Python
企业版Windows 11有哪些新功能? Win11适用于企业的功能介绍
2021/11/21 数码科技
Python绘制散点图之可视化神器pyecharts
2022/07/07 Python