2017-07-11 2 views
2

(列名に基づいて)別でデータフレームの一部の列を置き換えDataFramedf1は、私が持っている

| A | B | C | D | 
----------------- 
| 0 | 1 | 3 | 4 | 
| 2 | 1 | 8 | 4 | 
| 0 | 2 | 3 | 1 | 

DataFramedf2

私は列 Aとの Dを交換したい
| A | D | 
--------- 
| 2 | 2 | 
| 3 | 2 | 
| 1 | 9 | 

df1と同等の列のdf2があります。

確かに私は

df1['A'] = df2['A'] 
df1['D'] = df2['D'] 

ような何かを行うことができます。しかし、私は列の数千を持っているので、私はこれを自動的に行うためのソリューションを必要としています。

答えて

3

これを行う方法は、代わりにデータフレームを変更しますpd.DataFrame.update
アップデートであります別のデータフレームに情報を格納します。

df1.update(df2) 

この利点は、あなたのdtypesdf1には保存されていることです。

df1 

    A B C D 
0 2 1 3 2 
1 3 1 8 2 
2 1 2 3 9 

場所に出て更新してこれを行ったのはもう一つの方法は、pd.DataFrame.iteritemsに開梱pd.DataFrame.assignと辞書を使用していたことであろう。ただし、これにはdf2に新しい列が追加されています。

df1.assign(**dict(df2.iteritems())) 

    A B C D 
0 2 1 3 2 
1 3 1 8 2 
2 1 2 3 9 
1

ループのためのシンプルで十分です:

for c in df2.columns: 
    df1[c] = df2[c] 
6

あなたはcombine_firstを使用することができます。

df2.combine_first(df1) 

# A B C D 
#0 2 1.0 3.0 2 
#1 3 1.0 8.0 2 
#2 1 2.0 3.0 9 
0
for col in df1.columns: 
    if col in df2.columns.tolist(): 
     df1[col] = df2[col]