2016-05-10 6 views
1

2つの異なるデータフレームに同じ名前の2つの列の値をマージするには、最初のデータフレームの値を2番目のデータフレームの列の値で更新する2番目のデータフレームで利用可能(つまり、nullではない)ですか?その後、pandas:DataFramesをマージするときに列の値を更新する

df3 = pd.DataFrame([ 1, 2, 4, 5], columns=["a"], index=[0,1,2,3]) 

私は最初のマージを実行することにより、これを行う方法を考えることができますが()と:

2つのデータフレームがあるのであれば:

df1 = pd.DataFrame([ 1, 2, None, 3], columns=["a"], index=[0,1,2,3]) 
df2 = pd.DataFrame([ None, None, 4, 5], columns=["a"], index=[0,1,2,3]) 

その後、所望の出力は次のようになりカスタム関数で 'apply()'を使って結果の列の値をマージすると、これはあまりにも複雑に思えます。さらに、私は複数の列のためにこれを行う必要があります。これを行うよりエレガントな方法はありますか?

私が探している関数は、後者のパラメータが当然存在しないという事実を除いて、 'overwrite_values = True'で左マージを実行するように振る舞います。

A 2列のやや複雑な例:

df1 = pd.DataFrame([ [1, 'a'], [2, 'b'], [None, None], [3, None] ], 
        columns=["a", "b"], index=[0,1,2,3]) 
df2 = pd.DataFrame([ [None, None],[None, 'x'],[4, 'c'], [5, 'd'] ], 
        columns=["a", "b"], index=[0,1,2,3]) 

その後、所望の出力は次のようになります。

df3 = pd.DataFrame([ [1, 'a'], [2, 'x'], [4, 'c'], [5, 'd']], 
        columns=["a", "b"], index=[0,1,2,3]) 

多くの感謝!

答えて

2

あなたはcombine_firstたい:

In [19]: 
df1 = pd.DataFrame([ [1, 'a'], [2, 'b'], [None, None], [3, None] ], 
        columns=["a", "b"], index=[0,1,2,3]) 
df2 = pd.DataFrame([ [None, None],[None, 'x'],[4, 'c'], [5, 'd'] ], 
        columns=["a", "b"], index=[0,1,2,3]) 
df1.combine_first(df2) 

Out[19]: 
    a b 
0 1.0 a 
1 2.0 b 
2 4.0 c 
3 3.0 d 
+0

確かに、速い答えてくれてありがとう!この場合、必要な出力を得るためにdf2.combine_first(df1)にする必要があります(関数を呼び出す2番目のデータフレーム)。 – tibi3000

関連する問題