簡體   English   中英

根據鍵列合並3個pandas

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM