• merge_ordered:
    函数允许组合时间序列和其他有序数据。 特别是它有一个可选的fill_method关键字来填充/插入缺失的数据。
import pandas as pdleft = pd.DataFrame({'k': ['K0', 'K1', 'K1', 'K2'],'lv': [1, 2, 3, 4],'s': ['a', 'b', 'c', 'd']})
right = pd.DataFrame({'k': ['K1', 'K2', 'K4'],'rv': [1, 2, 3]})
pd.merge_ordered(left, right, fill_method='ffill', left_by='s')
# 当merge没有指定链接键时,默认从left和right列的交集将被推断为连接键
Out[2]: k   lv  s   rv
0   K0  1.0  a  NaN
1   K1  1.0  a  1.0
2   K2  1.0  a  2.0
3   K4  1.0  a  3.0
4   K1  2.0  b  1.0
5   K2  2.0  b  2.0
6   K4  2.0  b  3.0
7   K1  3.0  c  1.0
8   K2  3.0  c  2.0
9   K4  3.0  c  3.0
10  K1  NaN  d  1.0
11  K2  4.0  d  2.0
12  K4  4.0  d  3.0
  • merge_asof
    除了我们匹配最近的键而不是相等的键之外,其他的都类似于有序的left-join 。 对于左侧DataFrame中的每一行,我们选择右侧DataFrame中on键对应的值小于left的键对应的值的最后一行。 两个DataFrame必须按键排序。
trades = pd.DataFrame({'time': pd.to_datetime(['20160525 13:30:00.023','20160525 13:30:00.038','20160525 13:30:00.048','20160525 13:30:00.048','20160525 13:30:00.048']),'ticker': ['MSFT', 'MSFT','GOOG', 'GOOG', 'AAPL'],'price': [51.95, 51.95,720.77, 720.92, 98.00],'quantity': [75, 155,100, 100, 100]},columns=['time', 'ticker', 'price', 'quantity'])quotes = pd.DataFrame({'time': pd.to_datetime(['20160525 13:30:00.023','20160525 13:30:00.023','20160525 13:30:00.030','20160525 13:30:00.041','20160525 13:30:00.048','20160525 13:30:00.049','20160525 13:30:00.072','20160525 13:30:00.075']),'ticker': ['GOOG', 'MSFT', 'MSFT','MSFT', 'GOOG', 'AAPL', 'GOOG','MSFT'],'bid': [720.50, 51.95, 51.97, 51.99,720.50, 97.99, 720.50, 52.01],'ask': [720.93, 51.96, 51.98, 52.00,720.93, 98.01, 720.88, 52.03]},columns=['time', 'ticker', 'bid', 'ask'])trades
Out[4]: time ticker   price  quantity
0 2016-05-25 13:30:00.023   MSFT   51.95        75
1 2016-05-25 13:30:00.038   MSFT   51.95       155
2 2016-05-25 13:30:00.048   GOOG  720.77       100
3 2016-05-25 13:30:00.048   GOOG  720.92       100
4 2016-05-25 13:30:00.048   AAPL   98.00       100quotes
Out[5]: time ticker     bid     ask
0 2016-05-25 13:30:00.023   GOOG  720.50  720.93
1 2016-05-25 13:30:00.023   MSFT   51.95   51.96
2 2016-05-25 13:30:00.030   MSFT   51.97   51.98
3 2016-05-25 13:30:00.041   MSFT   51.99   52.00
4 2016-05-25 13:30:00.048   GOOG  720.50  720.93
5 2016-05-25 13:30:00.049   AAPL   97.99   98.01
6 2016-05-25 13:30:00.072   GOOG  720.50  720.88
7 2016-05-25 13:30:00.075   MSFT   52.01   52.03

下面Oder的顺序是按照ticker排序,连接键是time:

pd.merge_asof(trades, quotes,on='time',by='ticker')
Out[6]: time ticker   price  quantity     bid     ask
0 2016-05-25 13:30:00.023   MSFT   51.95        75   51.95   51.96
1 2016-05-25 13:30:00.038   MSFT   51.95       155   51.97   51.98
2 2016-05-25 13:30:00.048   GOOG  720.77       100  720.50  720.93
3 2016-05-25 13:30:00.048   GOOG  720.92       100  720.50  720.93
4 2016-05-25 13:30:00.048   AAPL   98.00       100     NaN     NaN

可以看出相当于left_join,只根据left的key进行merge。值得注意的是,right对应的值的time最大不能超过left的time,比如left中 2016-05-25 13:30:00.038 MSFT,那么拼接的right对应的时间最大是 2016-05-25 13:30:00.030 MSFT 51.97 51.98。APPL在right中就没有对应的值。

  • tolerance:添加容忍的时间差;例如我们仅在报价时间和交易时间之间的2ms内,意味着交易的时间减去10ms再进行比较
pd.merge_asof(trades, quotes,on='time',by='ticker',tolerance=pd.Timedelta('2ms'))
Out[7]: time ticker   price  quantity     bid     ask
0 2016-05-25 13:30:00.023   MSFT   51.95        75   51.95   51.96
1 2016-05-25 13:30:00.038   MSFT   51.95       155     NaN     NaN
2 2016-05-25 13:30:00.048   GOOG  720.77       100  720.50  720.93
3 2016-05-25 13:30:00.048   GOOG  720.92       100  720.50  720.93
4 2016-05-25 13:30:00.048   AAPL   98.00       100     NaN     NaN

我们仅在报价时间和交易时间之间的10ms内,我们按时排除完全匹配。 请注意,虽然我们排除了(报价quote)完全匹配,但先前的quote会传播到该时间点。

pd.merge_asof(trades, quotes,on='time',by='ticker',tolerance=pd.Timedelta('10ms'),allow_exact_matches=False)
Out[8]: time ticker   price  quantity    bid    ask
0 2016-05-25 13:30:00.023   MSFT   51.95        75    NaN    NaN
1 2016-05-25 13:30:00.038   MSFT   51.95       155  51.97  51.98
2 2016-05-25 13:30:00.048   GOOG  720.77       100    NaN    NaN
3 2016-05-25 13:30:00.048   GOOG  720.92       100    NaN    NaN
4 2016-05-25 13:30:00.048   AAPL   98.00       100    NaN    NaN

【python】详解pandas库的pd.merge_ordered与pd.merge_asof相关推荐

  1. python read_excel header_详解pandas库pd.read_excel操作读取excel文件参数整理与实例

    除了使用xlrd库或者xlwt库进行对excel表格的操作读与写,而且pandas库同样支持excel的操作:且pandas操作更加简介方便. 首先是pd.read_excel的参数:函数为: pd. ...

  2. python read_excel 参数_详解pandas库pd.read_excel操作读取excel文件参数整理与实例

    详解pandas库pd.read_excel操作读取excel文件参数整理与实例 来源:中文源码网    浏览: 次    日期:2019年11月5日 详解pandas库pd.read_excel操作 ...

  3. python替换缺失值_详解Pandas 处理缺失值指令大全

    前言 运用pandas 库对所得到的数据进行数据清洗,复习一下相关的知识. 1 数据清洗 1.1 处理缺失数据 对于数值型数据,分为缺失值(NAN)和非缺失值,对于缺失值的检测,可以通过Python中 ...

  4. python怎么画参数函数图像_详解pandas.DataFrame.plot() 画图函数

    首先看官网的DataFrame.plot( )函数 DataFrame.plot(x=None, y=None, kind='line', ax=None, subplots=False, share ...

  5. python中的iloc函数_详解pandas中利用DataFrame对象的.loc[]、.iloc[]方法抽取数据

    pandas的DataFrame对象,本质上是二维矩阵,跟常规二维矩阵的差别在于前者额外指定了每一行和每一列的名称.这样内部数据抽取既可以用"行列名称(对应.loc[]方法)",也 ...

  6. dataframe groupby_详解pandas中的map、apply、applymap、groupby、agg.

    一.简介 pandas提供了很多方便简洁的方法,用于对单列.多列数据进行批量运算或分组聚合运算,熟悉这些方法后可极大地提升数据分析的效率,也会使得你的代码更加地优雅简洁. 本文就将针对pandas中的 ...

  7. 一文详解Pandas

    一文详解Pandas 一.Pandas概述 二.Pandas数据结构 2.1 Series 2.2 DataFrame数据结构 二.数学与统计计算 三.DataFrame的文件操作 3.1 读取文件 ...

  8. 【原创干货】6000字、22个案例详解Pandas数据分析/预处理时的实用技巧,超简单...

    上两篇原创的文章,小编主要是讲了数据可视化方面的内容,但是好像看得人不是很多的样子(搞得小编心里拔凉拔凉的....) [硬核干货]4500字.10个案例分享几个Python可视化小技巧,助你绘制高质量 ...

  9. 四、Python数据挖掘(Pandas库)

    四.Python数据挖掘(Pandas库) 目录: 四.Python数据挖掘(Pandas库) 一.Pandas 简介 二.Pandas 三大结构之--DataFrame 1.DataFrame 的创 ...

  10. Python数据分析之Pandas库

    Python数据分析之Pandas库 一.Pandas简介 二.Pandas库的安装 三.Pandas的数据结构 四.Series 和 DataFrame 数据结构的使用 五.其他可以参考的网站 一. ...

最新文章

  1. Makefile完全解析PART5.使用变量
  2. 用aspnetpager实现datalist分页(绝对的简单实用)
  3. box-shadow实现曲线投影效果
  4. Struts2+Spring传参
  5. SAP 客户主数据表BUT000的extractor
  6. .net c# 中获得GridView的EmptyDataTemplate中的控件的方法(转)
  7. 堰流实验报告思考题_堰流流量系数测定实验
  8. 如何逼疯一名数学系学生?
  9. 使用原生Java代码生成可执行Jar包
  10. 欧姆龙nj与nx哪个高端_没想到还有比三菱更垃圾的PLC,欧姆龙隆重登场
  11. 什么是中药药浴?中药药浴的操作方法和注意事项
  12. 软件测试处理事物一般步骤,软件设计师考试题型分析及解法经验
  13. Cisco Packet Tracer安装
  14. 以CRM系统为案例讲解数据分析(重要性介绍及分析方法)
  15. SpringMVC——MVC思想、前端控制器、SpringMVC概述、编写第一个SpringMVC程序
  16. 百度实体链接比赛后记:行为建模和实体链接(含代码分享)
  17. 了解一下ES module 和 Commonjs
  18. 网站向bing搜索提交URL
  19. linux序列拼接软件,EST序列的聚类、拼接以及纠错是怎样进行的,推荐使用那些软件?!...
  20. Python用Requests爬虫实现截屏翻译

热门文章

  1. C# 火星文转化 算法 dictionary 的使用案例
  2. 超码、候选码和主码有什么区别?
  3. 绿色碳点溶液|碳量子点激发波长:365nm发射波长:525nm
  4. 微带线贴片天线尺寸的计算,利用Matlab计算+常见的RF计算在线公式
  5. 徒手撸平台——基于Springboot+layui实现接口自动化平台
  6. ICEM学习笔记(一)
  7. 在 Windows Service 服务上部署 AutoVue_EMP_21_0_2 的操作手册
  8. GEE实战 | 计算NDVI NDWI
  9. 发布订阅模式(一):tiny-emitter
  10. SpringBoot在thymeleaf模板引擎下集成layDate日期插件