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
-
与可选填合并/插值。
例子
> > >左=ps。DataFrame({“一个”:(1,5,10),“left_val”:(“一个”,“b”,“c”]})> > >左一个left_val0 11 5 b2 10 c
> > >正确的=ps。DataFrame({“一个”:(1,2,3,6,7),“right_val”:(1,2,3,6,7]})> > >正确的一个right_val0 1 11 2 22 3 33 6 64 7 7
> > >ps。merge_asof(左,正确的,在=“一个”)。sort_values(“一个”)。reset_index(下降=真正的)一个left_val right_val0 1 11 5 b 32 10 c 7
> > >ps。merge_asof(…左,…正确的,…在=“一个”,…allow_exact_matches=假…)。sort_values(“一个”)。reset_index(下降=真正的)一个left_val right_val0 1南1 5 b 3.02 10 c 7.0
> > >ps。merge_asof(…左,…正确的,…在=“一个”,…方向=“转发”…)。sort_values(“一个”)。reset_index(下降=真正的)一个left_val right_val0 1 1.01 5 b 6.02 10 c南
> > >ps。merge_asof(…左,…正确的,…在=“一个”,…方向=“最近的”…)。sort_values(“一个”)。reset_index(下降=真正的)一个left_val right_val0 1 11 5 b 62 10 c 7
我们也可以使用索引DataFrames。
> > >左=ps。DataFrame({“left_val”:(“一个”,“b”,“c”)},指数=(1,5,10])> > >左left_val15 b10 c
> > >正确的=ps。DataFrame({“right_val”:(1,2,3,6,7)},指数=(1,2,3,6,7])> > >正确的right_val12 - 23个36个67日7
> > >ps。merge_asof(左,正确的,left_index=真正的,right_index=真正的)。sort_index()left_val right_val1一15 b 310 c 7
这是一个真实的times-series例子
> > >报价=ps。DataFrame(…{…“时间”:(…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
> > >交易=ps。DataFrame(…{…“时间”:(…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引号
> > >ps。merge_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报价时间和贸易之间的时间
> > >ps。merge_asof(…交易,…报价,…在=“时间”,…通过=“股票”,…宽容=F。expr(“间隔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之间的报价时间和交易时间和我们排除精确匹配。然而之前数据将向前传播
> > >ps。merge_asof(…交易,…报价,…在=“时间”,…通过=“股票”,…宽容=F。expr(“间隔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南南