2017-11-27 8 views
0

私は、以下のように2つのデータフレームをパンダに持っています。 EmpIDは、両方のデータフレームの主キーです。完全アウタージョインを使用してパンダで2つのデータフレームに結合する

との観測がある場合は、私が存在する場合は、1つのデータフレームで

  1. 欠落したデータを別のテーブルから値を充填することができるようにのEmpIDとこれら二つのデータフレームに参加したいとキーが一致
  2. df_first = pd.DataFrame([[1, 'A',1000], [2, 'B',np.NaN],[3,np.NaN,3000],[4, 'D',8000],[5, 'E',6000]], columns=['EmpID', 'Name','Salary']) 
    df_second = pd.DataFrame([[1, 'A','HR','Delhi'], [8, 'B','Admin','Mumbai'],[3,'C','Finance',np.NaN],[9, 'D','Ops','Banglore'],[5, 'E','Programming',np.NaN],[10, 'K','Analytics','Mumbai']], columns=['EmpID', 'Name','Department','Location']) 
    

    新しいキーは結果のデータフレームに追加する必要があります

これを達成するために以下のコードを使用しました。

merged_df = pd.merge(df_first,df_second,how='outer',on=['EmpID']) 

しかし、このコードでは私が望ましくない重複する列が得られます。このため、両方のテーブルの一意の列をマージするためにのみ使用しました。

ColNames = list(df_second.columns.difference(df_first.columns)) 
ColNames.append('EmpID') 
merged_df = pd.merge(df_first,df_second,how='outer',on=['EmpID']) 

今、私は重複する列を得ることはありませんが、値を取得するのいずれかのキーが一致する所見ではありません。

誰かが私を助けることができたら本当に感謝します。

よろしく、 カイラスネギ

答えて

0

あなたが列EmpIDによって作成されたインデックスで一致のset_indexcombine_firstを必要とするようだ:

df = df_first.set_index('EmpID').combine_first(df_second.set_index('EmpID')).reset_index() 
print (df) 
    EmpID Department Location Name Salary 
0  1   HR  Delhi A 1000.0 
1  2   NaN  NaN B  NaN 
2  3  Finance  NaN C 3000.0 
3  4   NaN  NaN D 8000.0 
4  5 Programming  NaN E 6000.0 
5  8  Admin Mumbai B  NaN 
6  9   Ops Banglore D  NaN 
7  10 Analytics Mumbai K  NaN 

EDIT:列のいくつかの順序については

reindexが必要になります。

#concatenate all columns names togetehr and remove dupes 
ColNames = pd.Index(np.concatenate([df_second.columns, df_first.columns])).drop_duplicates() 
print (ColNames) 
Index(['EmpID', 'Name', 'Department', 'Location', 'Salary'], dtype='object') 

df = (df_first.set_index('EmpID') 
     .combine_first(df_second.set_index('EmpID')) 
     .reset_index() 
     .reindex(columns=ColNames)) 
print (df) 
    EmpID Name Department Location Salary 
0  1 A   HR  Delhi 1000.0 
1  2 B   NaN  NaN  NaN 
2  3 C  Finance  NaN 3000.0 
3  4 D   NaN  NaN 8000.0 
4  5 E Programming  NaN 6000.0 
5  8 B  Admin Mumbai  NaN 
6  9 D   Ops Banglore  NaN 
7  10 K Analytics Mumbai  NaN 
+0

このソリューションは目的を果たしますが、列の順序を保持できるかどうかを確認したいだけです。最初に最初のデータフレームから2番目のデータフレームまでの列が必要です。また、外部結合を使用して実行できるかどうかも考えています。 –

+0

わかっているのかわからないのはなぜですか?もっと説明できますか? – jezrael

+0

私の実際のデータセットは約200列あり、特定の順序で設定されています。データセットは今度はこの順序でしか使用されていません。この操作を実行すると、このデータセットで作業している人は慣れていないソート順になります。だから私は列の順序を維持できる方法があれば考えていました。 –

関連する問題