[英]Merge 3 pandas based on key columns
我是熊貓新手我從MySql數據庫中提取了3個CSV文件並存儲在pandas數據幀中。 我為它們看起來像這樣的所有3個文件生成了一個順序id:
df1
id1 key_column1 name1
1 567 qqq
2 898 rrr
3 345 bbb
df2
id2 key_column2 name2
4 967 qqqq
5 998 rrrr
6 945 bbbb
df3
id3 key_column1 key_column2
7 345 967
8 567 945
df1和df2分別代表2個表,它們的原始key_columns分別是key_column1和key_column2。 df3包含基於其key_columns的df1和df2的映射。 現在df3必須根據生成的順序id進行映射,它必須如下所示
df3
id3 id1 id2 key_column1 key_column2
7 3 4 345 967
8 1 6 567 945
我最初嘗試合並一列,但我沒有任何值。
df=pd.merge(df1,df3,left_on=df1['key_column1'],right_on=df3['key_column1'],how='inner')
您可以從df3
的列創建字典,並使用它來map
key_column1
的值:
map_ = dict(zip(df3.key_column1, df3.key_column2))
key_df1 = df1.key_column1.map(map_).fillna(0)
然后merge
現在具有相同鍵的兩個數據幀:
(df1.merge(df2, left_on= key_df1, right_on='key_column2')
.drop(['name1', 'name2'], 1))
id1 key_column1 id2 key_column2
0 1 567 6 945
1 3 345 4 967
我們可以使用DataFrame.merge
兩次將三個數據幀組合在一起。 之后,我們使用DataFrame.iloc
刪除我們不需要的列。
df_all = df3.merge(df2, on='key_column2', suffixes=['', '_2'])\
.merge(df1, on='key_column1', suffixes=['', '_1'])\
.iloc[:, :-4]
print(df_all)
id3 id1 id2 key_column1 key_column2
0 7 3 4 345 967
1 8 1 6 567 945
這似乎對我有用。
df3.merge(df1,how='left',on='key_column1').merge(df2,how='left',on='key_column2')
id3 key_column1 key_column2 id1 name1 id2 name2
0 7 345 967 3 bbb 4 qqqq
1 8 567 945 1 qqq 6 bbbb
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.