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南南