2016-05-15 19 views
1

私は2つのデータフレームdf1とdf2を持っています。 df1には列['UserId'、 'company'、 'deg']があり、100の観測値があります。 df2には列['UserId'、 'deg']があり、10の観測値があります。 df1とdf2のインデックスは 'userId'と完全に一致します。異なるデータフレームからpandasを更新/置換する

df1をdf2のもので更新したいと考えています。 df2の 'UserId'列はd​​f1 ....の 'UserId'列のサブセットです。したがって、追加するものはありません。ちょうど 'userId'(および/または普通のインデックス)に基づいています。

,'UserId','deg' 
16,'smith11','BS' 
39,'ssri44','MS' 
45,'har43','MS' 

DF2

,'UserId','Company','deg' 
6,'john21','ibm','bs' 
12,'mary33','cisco','ms' 
16,'smith11','intel','none' 
20,'lucy55','intel','bs' 
33,'tanya32','fb','ms' 
39,'ssri44','google','none' 
45,'har43','CDs','none' 

DF1今、私はDF1を更新するために、DF2の情報を使用します。ご覧のとおり、インデックス値とuserIdはdf1のものと完全に一致します。

提案がありますか?

ありがとうございます!

あなたが最初 replace None NaNにして、 df2によって df1None値を更新するための fillnaを使用することができます

答えて

1

df1.replace({"'none'": np.nan}, inplace=True) 
#or omit '', for me works uncomment version 
#df1.replace({"none": np.nan}, inplace=True) 

print df1.fillna(df2) 

    'UserId' 'Company' 'deg' 
6 'john21'  'ibm' 'bs' 
12 'mary33' 'cisco' 'ms' 
16 'smith11' 'intel' 'BS' 
20 'lucy55' 'intel' 'bs' 
33 'tanya32'  'fb' 'ms' 
39 'ssri44' 'google' 'MS' 
45 'har43'  'CDs' 'MS' 

updateと別の解決策:

df1.replace({"'none'": np.nan}, inplace=True) 

df1.update(df2) 
print df1 
    'UserId' 'Company' 'deg' 
6 'john21'  'ibm' 'bs' 
12 'mary33' 'cisco' 'ms' 
16 'smith11' 'intel' 'BS' 
20 'lucy55' 'intel' 'bs' 
33 'tanya32'  'fb' 'ms' 
39 'ssri44' 'google' 'MS' 
45 'har43'  'CDs' 'MS' 

あなたはdf1df2を更新したい場合merge

print pd.merge(df2,df1,left_index=True,right_index=True,how='left', on=["'UserId'","'deg'"]) 
    'UserId' 'deg' 'Company' 
16 'smith11' 'BS' 'intel' 
39 'ssri44' 'MS' 'google' 
45 'har43' 'MS'  'CDs' 
関連する問題