Pandas merge_ordered(~) 方法將兩個 DataFrames 連接起來,並可以選擇執行填充或插值。
參數
1. left | DataFrame
左側DataFrame 執行連接。
2. right | DataFrame
用於執行連接的右側DataFrame。
3. on | string 或 list
要加入的列的標簽。
注意
on 參數隻是為了方便起見。如果要連接的列具有不同的標簽,則必須指定 left_on 和 right_on 。
4. left_on | string 或 array-like
left 中要執行連接的列的標簽。
5. right_on | string 或 array-like
right 中要執行連接的列的標簽。
6. left_by | string 或 list<string>
left 到 "expand" 中的列的標簽。請參閱下麵的示例以進行說明。
7. right_by | string 或 list<string>
right 到 "expand" 中的列的標簽。請參閱下麵的示例以進行說明。
8. fill_method | string 或 None | optional
如何在合並的DataFrame中填充NaN:
|
值 |
說明 |
|---|---|
|
|
使用之前的非 |
|
|
保留 |
默認情況下,fill_method=None 。
9. suffixes | (string, string) 的tuple | optional
要附加到生成的 DataFrame 中的重複列標簽的後綴名稱。您還可以傳遞單個 None 而不是 suffixes 中的字符串,以指示左列或右列標簽應保持原樣。默認情況下,suffixes=("_x", "_y") 。
10.how | string | optional
要執行的連接類型:
|
值 |
說明 |
|---|---|
|
|
源 DataFrame 中的所有行都將出現在生成的 DataFrame 中。這相當於 left-join 的 SQL。 |
|
|
右側 DataFrame 中的所有行都將出現在生成的 DataFrame 中。這相當於 right-join 的 SQL。 |
|
|
來自源和右側 DataFrame 的所有行都將出現在生成的 DataFrame 中。這相當於 outer-join 的 SQL。 |
|
|
在源 DataFrame 中具有匹配值的所有行都將出現在生成的 DataFrame 中。這是相當於 inner-join 的 SQL。 |
默認情況下,how="outer" 。
這是說明差異的經典維恩圖:
返回值
合並的 DataFrame 。
例子
基本用法
考慮一家擁有一些有關其產品和客戶的數據的商店:
df_products = pd.DataFrame({"product": ["computer", "smartphone", "headphones"],
"bought_by": ["bob", "alex", "david"]},
index=["A","B","C"])
df_customers = pd.DataFrame({"name":["alex","bob","cathy"], "age":[10, 20, 30]})
[df_products] | [df_customers]
product bought_by | name age
A computer bob | 0 alex 10
B smartphone alex | 1 bob 20
C headphones david | 2 cathy 30
要基於列 bought_by 和 name 對兩個 DataFrames 執行外連接:
pd.merge_ordered(df_products, df_customers, left_on="bought_by", right_on="name", how="outer")
product bought_by name age
0 smartphone alex alex 10.0
1 computer bob bob 20.0
2 NaN NaN cathy 30.0
3 headphones david NaN NaN
指定fill_method
與 merge(~) 不同,merge_ordered(~) 允許填充由於連接而出現的缺失值。
再次考慮與上麵相同的DataFrames:
[df_products] | [df_customers]
product bought_by | name age
A computer bob | 0 alex 10
B smartphone alex | 1 bob 20
C headphones david | 2 cathy 30
默認情況下, fill_method=None ,這意味著生成的 NaN 保持原樣:
pd.merge_ordered(df_products, df_customers, left_on="bought_by", right_on="name", how="outer")
product bought_by name age
0 smartphone alex alex 10.0
1 computer bob bob 20.0
2 NaN NaN cathy 30.0
3 headphones david NaN NaN
要填充這些 NaN ,請像這樣設置 fill_method="ffill" :
pd.merge_ordered(df_products, df_customers, left_on="bought_by", right_on="name", how="outer", fill_method="ffill")
product bought_by name age
0 smartphone alex alex 10
1 computer bob bob 20
2 computer bob cathy 30
3 headphones david cathy 30
請注意所有NaN 是如何用之前的非NaN 值填充的。
警告
請注意,這個例子是隻是為了說明填充的工作原理- 我們絕不會進行此類填充。這種填充邏輯的實際用例主要是為時間序列保留的,因為用先前記錄的日期時間填充更有意義。
指定left_by
讓我們使用與上麵相同的示例:
[df_products] | [df_customers]
product bought_by | name age
A computer bob | 0 alex 10
B smartphone alex | 1 bob 20
C headphones david | 2 cathy 30
默認情況下, left_by=None ,這意味著生成的 DataFrame 是使用傳統連接構造的:
pd.merge_ordered(df_products, df_customers, left_on="bought_by", right_on="name", how="outer")
product bought_by name age
0 smartphone alex alex 10.0
1 computer bob bob 20.0
2 NaN NaN cathy 30.0
3 headphones david NaN NaN
設置 left_by="product" 將為連接鍵 ( bought_by ) 中的每一行重複每個產品項:
pd.merge_ordered(df_products, df_customers, left_on="bought_by", right_on="name", how="outer", left_by="product")
product bought_by age name
0 computer NaN 10.0 alex
1 computer bob 20.0 bob
2 computer NaN 30.0 cathy
3 smartphone alex 10.0 alex
4 smartphone NaN 20.0 bob
5 smartphone NaN 30.0 cathy
6 headphones NaN 10.0 alex
7 headphones NaN 20.0 bob
8 headphones NaN 30.0 cathy
9 headphones david NaN NaN
指定後綴
考慮以下數據幀:
df_products = pd.DataFrame({"product": ["computer", "smartphone", "headphones"],
"age": [7,8,9],
"bought_by": ["bob", "alex", "bob"]},
index=["A","B","C"])
df_customers = pd.DataFrame({"name":["alex","bob","cathy"], "age":[10, 20, 30]})
[df_products] | [df_customers]
product age bought_by | name age
A computer 7 bob | 0 alex 10
B smartphone 8 alex | 1 bob 20
C headphones 9 david | 2 cathy 30
請注意兩個 DataFrames 如何具有重疊的列標簽 - age 。
默認情況下, suffixes=("_x","_y") ,這意味著如果合並的 DataFrame 具有重疊的列標簽,則後綴 "_x" 將附加到左側 DataFrame 的重疊列標簽上,並將 "_y" 附加到右側 DataFrame 上:
pd.merge_ordered(df_products, df_customers, left_on="bought_by", right_on="name", how="outer")
product age_x bought_by name age_y
0 smartphone 8.0 alex alex 10
1 computer 7.0 bob bob 20
...
我們可以像這樣指定我們自己的後綴:
pd.merge_ordered(df_products, df_customers, left_on="bought_by", right_on="name", how="outer", suffixes=["_A","_B"])
product age_A bought_by name age_B
0 smartphone 8.0 alex alex 10
1 computer 7.0 bob bob 20
...
您還可以傳遞 None 而不是字符串來指示左列或右列標簽應保持原樣:
pd.merge_ordered(df_products, df_customers, left_on="bought_by", right_on="name", how="outer", suffixes=[None,"_B"])
product age bought_by name age_B
0 smartphone 8.0 alex alex 10
1 computer 7.0 bob bob 20
...
相關用法
- Python merge_asof方法用法及代碼示例
- Python NumPy mean方法用法及代碼示例
- Python NumPy meshgrid方法用法及代碼示例
- Python statistics median_high()用法及代碼示例
- Python statistics median()用法及代碼示例
- Python memoryview.itemsize用法及代碼示例
- Python memoryview.nbytes用法及代碼示例
- Python memoryview.cast用法及代碼示例
- Python memoryview.obj用法及代碼示例
- Python memoryview.hex用法及代碼示例
- Python memoryview()用法及代碼示例
- Python memoryview.toreadonly用法及代碼示例
- Python NumPy median方法用法及代碼示例
- Python statistics median_low()用法及代碼示例
- Python memoryview用法及代碼示例
- Python memoryview.release用法及代碼示例
- Python memoryview.tolist用法及代碼示例
- Python memoryview.__eq__用法及代碼示例
- Python statistics median_grouped()用法及代碼示例
- Python memoryview.tobytes用法及代碼示例
- Python mxnet.symbol.op.broadcast_logical_xor用法及代碼示例
- Python matplotlib.patheffects.withTickedStroke用法及代碼示例
- Python mxnet.test_utils.get_zip_data用法及代碼示例
- Python mxnet.ndarray.op.uniform用法及代碼示例
- Python mxnet.symbol.op.log_softmax用法及代碼示例
注:本文由純淨天空篩選整理自Isshin Inada大神的英文原創作品 Pandas | merge_ordered method。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。
