import pandas as pd
# 創建成績表
scores = pd.DataFrame({
‘student_id’: [‘001’, ‘002’, ‘003’, ‘004’],
‘score’: [85, 76, 92, 80]
})
# 創建基本資料表
basic_info = pd.DataFrame({
‘student_id’: [‘001’, ‘002’, ‘003’, ‘004’],
‘name’: [‘Alice’, ‘Bob’, ‘Charlie’, ‘David’],
‘gender’: [‘F’, ‘M’, ‘M’, ‘M’]
})
# 以 student_id 欄位為基準合併
merged_df = pd.merge(left=scores,
right=basic_info,
left_on=’student_id’,
right_on=’student_id’,
how=’inner’)
print(“scores:\n%r”%scores)
print(“\nbasic_info:\n%r”%basic_info)
print(“\nmerged_df:\n%r”%merged_df)

輸出結果:

這裡的 left_on 參數指的是左側 DataFrame 的
以 student_id 為基準的欄位名稱,
right_on 參數指的是右側 DataFrame 的
以 student_id 為基準的欄位名稱,
因為兩個 DataFrame 中的欄位名稱是一樣的,
所以也可以寫成:
merged_df = pd.merge(left=scores, right=basic_info, on=’student_id’, how=’inner’)
使用right_index=True
import pandas as pd
# 創建成績表
scores = pd.DataFrame({
‘student_id’: [‘001’, ‘002’, ‘003’, ‘004’],
‘score’: [85, 76, 92, 80]
})
# 創建基本資料表,並將 student_id 設定為索引
basic_info = pd.DataFrame({
‘name’: [‘Alice’, ‘Bob’, ‘Charlie’, ‘David’],
‘gender’: [‘F’, ‘M’, ‘M’, ‘M’]
}, index=[‘001’, ‘002’, ‘003’, ‘004’])
basic_info.index.name = ‘student_id’ #此行非必要
merged_df = pd.merge(left=scores,
right=basic_info,
left_on=’student_id’,
right_index=True,
how=’inner’)
print(merged_df)

輸出結果:

推薦hahow線上學習python: https://igrape.net/30afN

pd.merge(
left,
right,
how=’inner’,
on=None,
left_on=None,
right_on=None,
left_index=False,
right_index=False,
sort=False,
suffixes=(‘_x’, ‘_y’),
copy=True,
indicator=False,
validate=None,
)
下面是各參數的說明:
- left: 要合併的左邊的 DataFrame。
- right: 要合併的右邊的 DataFrame。
- how: 合併的方式,可選值為 ‘left’, ‘right’, ‘outer’, ‘inner’,預設值為 ‘inner’。
- on: 用來合併的欄位名稱,必須存在於左右兩個 DataFrame 中。如果 left_index=True 或 right_index=True,則此參數無效。
- left_on: 用來合併的左邊的 DataFrame 的欄位名稱。如果 left_index=True,則此參數無效。
- right_on: 用來合併的右邊的 DataFrame 的欄位名稱。如果 right_index=True,則此參數無效。
- left_index: 是否以左邊的 DataFrame 的索引作為合併鍵。預設為 False。
- right_index: 是否以右邊的 DataFrame 的索引作為合併鍵。預設為 False。
- sort: 是否根據合併鍵排序。預設為 False。
- suffixes: 字符串元組,用於區分具有相同名稱的左邊和右邊 DataFrame 的重複列。預設為 (‘_x’, ‘_y’)。
- copy: 是否復製 DataFrame。如果設為 False,當左右兩個 DataFrame 共享記憶體時可能會改變原始 DataFrame。預設為 True。
- indicator: 將一個特殊的名為 _merge 的欄位添加到結果 DataFrame,顯示每行的合併方式。預設為 False。
- validate: 檢查合併的類型。可選值為 “one_to_one”、”one_to_many”、”many_to_one” 和 “many_to_many”。預設為 None,即不檢查。


![Python: 如何用 pandas.DataFrame.apply 讓DataFrame增加新的一欄 ; df[“mean”] = df.apply( np.mean, axis=1) ; DataFrame.apply(func, axis=0, raw=False, result_type=None, args=(), **kwargs) Python: 如何用 pandas.DataFrame.apply 讓DataFrame增加新的一欄 ; df[“mean”] = df.apply( np.mean, axis=1) ; DataFrame.apply(func, axis=0, raw=False, result_type=None, args=(), **kwargs)](https://i1.wp.com/savingking.com.tw/wp-content/uploads/2023/05/20230519084320_22.png?quality=90&zoom=2&ssl=1&resize=350%2C233)
![Python: pandas.DataFrame()處理雙維度資料,dict跟2D list轉為DataFrame有何差別?如何用index及columns屬性客製化index跟欄位名稱?df.index = [“一”,”二”,”三”,”四”] ; df.columns = 使用.head(n) ; .tail(m) ;取首n列,尾m列; .at[index,欄位名稱] 取單一資料 ; .iat[index,欄位順序] 取單一資料 ; .loc[index,欄位名稱] 取資料 ; .iloc[index,欄位順序];df.iloc[ [0,1],[0,2]])取資料 ; df.iloc[ 0:3,0:2]切片 Python: pandas.DataFrame()處理雙維度資料,dict跟2D list轉為DataFrame有何差別?如何用index及columns屬性客製化index跟欄位名稱?df.index = [“一”,”二”,”三”,”四”] ; df.columns = 使用.head(n) ; .tail(m) ;取首n列,尾m列; .at[index,欄位名稱] 取單一資料 ; .iat[index,欄位順序] 取單一資料 ; .loc[index,欄位名稱] 取資料 ; .iloc[index,欄位順序];df.iloc[ [0,1],[0,2]])取資料 ; df.iloc[ 0:3,0:2]切片](https://i0.wp.com/savingking.com.tw/wp-content/uploads/2022/11/20221111093547_79.png?quality=90&zoom=2&ssl=1&resize=350%2C233)



![Python: pandas.DataFrame的串接 pandas.concat() #concatenate 連接, 如何重新排列columns 順序? df[[“甲”, “乙”, “丙”]] ; df.reindex( columns = [“甲”, “乙”, “丙”] ) Python: pandas.DataFrame的串接 pandas.concat() #concatenate 連接, 如何重新排列columns 順序? df[[“甲”, “乙”, “丙”]] ; df.reindex( columns = [“甲”, “乙”, “丙”] )](https://i0.wp.com/savingking.com.tw/wp-content/uploads/2023/05/20241120092030_0_98dff3.png?quality=90&zoom=2&ssl=1&resize=350%2C233)


近期留言