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