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的Bottle框架写一个简单的服务接口的示例
Aug 25 Python
Python 基于Twisted框架的文件夹网络传输源码
Aug 28 Python
浅谈Python NLP入门教程
Dec 25 Python
Python内置模块hashlib、hmac与uuid用法分析
Feb 12 Python
利用python将json数据转换为csv格式的方法
Mar 22 Python
应用OpenCV和Python进行SIFT算法的实现详解
Aug 21 Python
Python3.7 基于 pycryptodome 的AES加密解密、RSA加密解密、加签验签
Dec 04 Python
Pycharm生成可执行文件.exe的实现方法
Jun 02 Python
Python虚拟环境的创建和使用详解
Sep 07 Python
详解java调用python的几种用法(看这篇就够了)
Dec 10 Python
python 爬取华为应用市场评论
May 29 Python
用Python编写简单的gRPC服务的详细过程
Jul 04 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中session存储及删除变量
2018/10/15 PHP
PHP自定义错误处理的方法分析
2018/12/19 PHP
jquery select多选框的左右移动 具体实现代码
2013/07/03 Javascript
使用 js+正则表达式为关键词添加链接
2014/11/11 Javascript
轻松创建nodejs服务器(9):实现非阻塞操作
2014/12/18 NodeJs
js实现仿Windows风格选项卡和按钮效果实例
2015/05/13 Javascript
JavaScript中的原型继承基础学习教程
2016/05/06 Javascript
详解JavaScript中数组的reduce方法
2016/12/02 Javascript
js实现input密码框显示/隐藏功能
2020/09/10 Javascript
vue2.0基于vue-cli+element-ui制作树形treeTable
2019/04/30 Javascript
egg.js的基本使用和调用数据库的方法示例
2019/05/18 Javascript
处理JavaScript值为undefined的7个小技巧
2020/07/28 Javascript
使用vue引入maptalks地图及聚合效果的实现
2020/08/10 Javascript
js实现随机点名
2021/01/19 Javascript
[02:44]DOTA2英雄基础教程 魅惑魔女
2014/01/07 DOTA
使用Pyinstaller的最新踩坑实战记录
2017/11/08 Python
利用Tkinter(python3.6)实现一个简单计算器
2017/12/21 Python
Python 生成 -1~1 之间的随机数矩阵方法
2018/08/04 Python
使用OpenCV实现仿射变换—平移功能
2019/08/29 Python
Django-celery-beat动态添加周期性任务实现过程解析
2020/11/26 Python
Python爬虫进阶之爬取某视频并下载的实现
2020/12/08 Python
详解python3类型注释annotations实用案例
2021/01/20 Python
python lambda的使用详解
2021/02/26 Python
美国排名第一的在线葡萄酒商店:Wine.com
2016/09/07 全球购物
巴西最大的家具及装饰用品店:Mobly
2017/10/11 全球购物
BASIC HOUSE官方旗舰店:韩国著名的服装品牌
2018/09/27 全球购物
Java中各种基本数据类型的默认值都是什么
2016/12/22 面试题
医药专业应届毕业生求职信范文
2014/01/01 职场文书
秦兵马俑教学反思
2014/02/07 职场文书
2014年党务公开方案
2014/05/08 职场文书
论文诚信承诺书
2014/05/23 职场文书
相亲活动方案
2014/08/26 职场文书
创先争优活动承诺书
2014/08/30 职场文书
教师考核鉴定意见
2015/06/05 职场文书
2016医师资格考试考生诚信考试承诺书
2016/03/25 职场文书
2019求职信大礼包
2019/05/15 职场文书