pyspark.pandas.merge_asof

pyspark.pandas。 merge_asof ( :联盟(pyspark.pandas.frame.DataFrame,pyspark.pandas.series.Series],正确的:联盟(pyspark.pandas.frame.DataFrame,pyspark.pandas.series.Series],:(任何工会,Tuple,…,没有)=没有一个,left_on:(任何工会,Tuple,…,没有)=没有一个,right_on:(任何工会,Tuple,…,没有)=没有一个,left_index:bool=,right_index:bool=,通过:联盟(任何元组(,…),列表(联盟[任何元组[,…]]],没有)=没有一个,left_by:联盟(任何元组(,…),列表(联盟[任何元组[,…]]],没有)=没有一个,right_by:联盟(任何元组(,…),列表(联盟[任何元组[,…]]],没有)=没有一个,后缀:元组(str,str]=“值”、“_y吗”,宽容:可选(任何]=没有一个,allow_exact_matches:bool=真正的,方向:str=“落后” )→pyspark.pandas.frame.DataFrame

执行一个asof合并。

这类似于一个左连接,只是我们匹配的关键,而不是平等的钥匙。

每一行的左边DataFrame:

  • “落后”的搜索选择最后一行的正确的DataFrame”的关键是小于或等于左边的关键。

  • “转发”搜索选择的第一行的DataFrame”的关键是大于或等于左边的关键。

  • “最近”的搜索选择的行正确的DataFrame”的关键是最近在绝对距离左边的关键。

选择匹配等价密钥与“的”前搜索“上”。

参数
DataFrame或命名的系列
正确的 DataFrame或命名的系列
标签

字段名加入。必须找到DataFrames。数据必须命令。而且这必须是一个数字列,如datetimelike、整数或浮动。或left_on / right_on必须有。

left_on 标签

在离开DataFrame字段名加入。

right_on 标签

在对DataFrame字段名加入。

left_index bool

使用索引的左边DataFrame连接键。

right_index bool

使用索引的DataFrame连接键。

通过 列名或列名列表

匹配这些列之前执行合并操作。

left_by 列名

在左边DataFrame字段名称相匹配。

right_by 列名

在正确的DataFrame字段名称相匹配。

后缀 长度序列(元组、列表…)

后缀申请重叠的列名在左边,右边,分别。

宽容 int或Timedelta,可选的,默认没有

在这个范围内选择asof宽容;必须兼容合并指数。

allow_exact_matches bool,默认的真
  • 如果这是真的,允许相同的匹配”的价值(即小于或等于或大于或等于)

  • 如果错误,同样的不匹配”的价值(即。大于号/严格小于号,严格)。

方向 “向后”(默认),“前进”,或“最近”

是否搜索之前,随后,或者接近的比赛。

返回
合并后的 DataFrame

另请参阅

合并

与数据库样式加入合并。

merge_ordered

与可选填合并/插值。

例子

> > >=psDataFrame({“一个”:(1,5,10),“left_val”:(“一个”,“b”,“c”]})> > >一个left_val0 11 5 b2 10 c
> > >正确的=psDataFrame({“一个”:(1,2,3,6,7),“right_val”:(1,2,3,6,7]})> > >正确的一个right_val0 1 11 2 22 3 33 6 64 7 7
> > >psmerge_asof(,正确的,=“一个”)sort_values(“一个”)reset_index(下降=真正的)一个left_val right_val0 1 11 5 b 32 10 c 7
> > >psmerge_asof(,正确的,=“一个”,allow_exact_matches=)sort_values(“一个”)reset_index(下降=真正的)一个left_val right_val0 1南1 5 b 3.02 10 c 7.0
> > >psmerge_asof(,正确的,=“一个”,方向=“转发”)sort_values(“一个”)reset_index(下降=真正的)一个left_val right_val0 1 1.01 5 b 6.02 10 c南
> > >psmerge_asof(,正确的,=“一个”,方向=“最近的”)sort_values(“一个”)reset_index(下降=真正的)一个left_val right_val0 1 11 5 b 62 10 c 7

我们也可以使用索引DataFrames。

> > >=psDataFrame({“left_val”:(“一个”,“b”,“c”)},指数=(1,5,10])> > >left_val15 b10 c
> > >正确的=psDataFrame({“right_val”:(1,2,3,6,7)},指数=(1,2,3,6,7])> > >正确的right_val12 - 23个36个67日7
> > >psmerge_asof(,正确的,left_index=真正的,right_index=真正的)sort_index()left_val right_val1一15 b 310 c 7

这是一个真实的times-series例子

> > >报价=psDataFrame({“时间”:(pd时间戳(“2016-05-25 13:30:00.023”),pd时间戳(“2016-05-25 13:30:00.023”),pd时间戳(“2016-05-25 13:30:00.030”),pd时间戳(“2016-05-25 13:30:00.041”),pd时间戳(“2016-05-25 13:30:00.048”),pd时间戳(“2016-05-25 13:30:00.049”),pd时间戳(“2016-05-25 13:30:00.072”),pd时间戳(“2016-05-25 13:30:00.075”)),“股票”:(“google”,“微软”,“微软”,“微软”,“google”,“apple”,“google”,“微软”),“收购”:(720.50,51.95,51.97,51.99,720.50,97.99,720.50,52.01),“问”:(720.93,51.96,51.98,52.00,720.93,98.01,720.88,52.03]})> > >报价时间股票报价问0 2016-05-25 13:30:00.023 google 720.50 - 720.931 2016-05-25 13:30:00.023 microsoft 51.95 - 51.962 2016-05-25 13:30:00.030 microsoft 51.97 - 51.983 2016-05-25 13:30:00.041 microsoft 51.99 - 52.004 2016-05-25 13:30:00.048 google 720.50 - 720.935 2016-05-25 13:30:00.049 apple 97.99 - 98.016 2016-05-25 13:30:00.072 google 720.50 - 720.887 2016-05-25 13:30:00.075 microsoft 52.01 - 52.03
> > >交易=psDataFrame({“时间”:(pd时间戳(“2016-05-25 13:30:00.023”),pd时间戳(“2016-05-25 13:30:00.038”),pd时间戳(“2016-05-25 13:30:00.048”),pd时间戳(“2016-05-25 13:30:00.048”),pd时间戳(“2016-05-25 13:30:00.048”)),“股票”:(“微软”,“微软”,“google”,“google”,“apple”),“价格”:(51.95,51.95,720.77,720.92,98.0),“数量”:(75年,155年,One hundred.,One hundred.,One hundred.]})> > >交易时间股票价格数量0 75 13:30:00.023 microsoft 51.95 2016-05-251 2016-05-25 13:30:00.038 microsoft 51.95 1552 100 13:30:00.048 google 720.77 2016-05-253 100 13:30:00.048 google 720.92 2016-05-25100 4 2016-05-25 13:30:00.048 apple 98.00

默认情况下我们正在采取的asof引号

> > >psmerge_asof(交易,报价,=“时间”,通过=“股票”)sort_values([“时间”,“股票”,“价格”])reset_index(下降=真正的)时间股票价格数量报价问0 2016-05-25 13:30:00.023 microsoft 51.95 75 51.95 - 51.961 2016-05-25 13:30:00.038 microsoft 51.95 155 51.97 - 51.982 100 13:30:00.048 apple 98.00 2016-05-25南南3 2016-05-25 13:30:00.048 google 720.77 100 720.50 - 720.934 2016-05-25 13:30:00.048 google 720.92 100 720.50 - 720.93

我们只asof女士在2报价时间和贸易之间的时间

> > >psmerge_asof(交易,报价,=“时间”,通过=“股票”,宽容=Fexpr(“间隔2毫秒)女士2 # pd.Timedelta (“”))sort_values([“时间”,“股票”,“价格”])reset_index(下降=真正的)时间股票价格数量报价问0 2016-05-25 13:30:00.023 microsoft 51.95 75 51.95 - 51.96155 2016-05-25 51.95 13:30:00.038 microsoft南南2 100 13:30:00.048 apple 98.00 2016-05-25南南3 2016-05-25 13:30:00.048 google 720.77 100 720.50 - 720.934 2016-05-25 13:30:00.048 google 720.92 100 720.50 - 720.93

我们只asof女士在10之间的报价时间和交易时间和我们排除精确匹配。然而之前数据将向前传播

> > >psmerge_asof(交易,报价,=“时间”,通过=“股票”,宽容=Fexpr(“间隔10毫秒”),女士10 # pd.Timedelta (“”)allow_exact_matches=)sort_values([“时间”,“股票”,“价格”])reset_index(下降=真正的)时间股票价格数量报价问0 75 13:30:00.023 microsoft 51.95 2016-05-25南南1 2016-05-25 13:30:00.038 microsoft 51.95 155 51.97 - 51.982 100 13:30:00.048 apple 98.00 2016-05-25南南3 100 720.77 13:30:00.048 google 2016-05-25南南100 4 2016-05-25 13:30:00.048 google 720.92南南