2017-05-04 11 views
0

私はいくつかの方法でデータフレームを処理しようとしています。 今、特定の列情報に基づいて2つのデータフレームを結合し、重複する行を削除したいのですが。特定の列情報に基づいて2つのデータフレームをマージする

可能ですか? 私は

状態でD3にDF1とDF2をマージしたい場合、私は例えば...

を連結機能を使用しようとしたが、faliled:C1 & c2の情報が同じであれば、削除、

  • 重複行(のみDF1およびDF2間C3のデータが異なる場合でも、DF1を使用する)、C1 & C2情報が異なる場合、両方の列(DF1、DF2)
を使用
  • df1 
    c1 c2 c3 
    0 0 x {'a':1 ,'b':2} 
    1 0 y {'a':3 ,'b':4} 
    2 2 z {'a':5 ,'b':6} 
    
    df2 
        c1 c2 c3 
    0 0 x {'a':11 ,'b':12} 
    1 0 y {'a':13 ,'b':14} 
    2 3 z {'a':15 ,'b':16} 
    

    期待される結果D3::前

    c1 c2 c3 
    0 0 x {'a':1 ,'b':2} 
    1 0 y {'a':3 ,'b':4} 
    2 2 z {'a':5 ,'b':6} 
    3 3 z {'a':15 ,'b':16} 
    

    がここ

  • +0

    どのように? – TLOwater

    答えて

    0

    をコードを入力してくださいあなたはmergeを使用してDF2だけである行を決定し、how='right'indicator=Trueを渡すことで、最初にこれを行うことができます、concat this with df1

    In [125]: 
    merged = df1.merge(df2, left_on=['c1','c2'], right_on=['c1','c2'], how='right', indicator=True) 
    merged = merged[merged['_merge']=='right_only'] 
    merged = merged.rename(columns={'c3_y':'c3'}) 
    merged 
    
    Out[125]: 
        c1 c2 c3_x    c3  _merge 
    2 3 z NaN {'a':15 ,'b':16} right_only 
    
    In [126]:  
    combined = pd.concat([df1, merged[df1.columns]]) 
    combined 
    
    Out[126]: 
        c1 c2    c3 
    0 0 x {'a':1 ,'b':2} 
    1 0 y {'a':3 ,'b':4} 
    2 2 z {'a':5 ,'b':6} 
    2 3 z {'a':15 ,'b':16} 
    

    我々は上記を打破する場合:マージ機能について

    In [128]: 
    merged = df1.merge(df2, left_on=['c1','c2'], right_on=['c1','c2'], how='right', indicator=True) 
    merged 
    
    Out[128]: 
        c1 c2   c3_x    c3_y  _merge 
    0 0 x {'a':1 ,'b':2} {'a':11 ,'b':12}  both 
    1 0 y {'a':3 ,'b':4} {'a':13 ,'b':14}  both 
    2 3 z    NaN {'a':15 ,'b':16} right_only 
    
    In [129]: 
    merged = merged[merged['_merge']=='right_only'] 
    merged 
    
    Out[129]: 
        c1 c2 c3_x    c3_y  _merge 
    2 3 z NaN {'a':15 ,'b':16} right_only 
    
    In [130]: 
    merged = merged.rename(columns={'c3_y':'c3'}) 
    merged 
    
    Out[130]: 
        c1 c2 c3_x    c3  _merge 
    2 3 z NaN {'a':15 ,'b':16} right_only 
    
    関連する問題