2016-07-29 9 views
2

私は2つのデータフレームdfと、このようなdf2を持っているその初期のに一致さパンダの2つのデータフレームの値を比較するには?

id initials 
0 100 J 
1 200 S 
2 300 Y 

    name initials 
0 John J 
1 Smith S 
2 Nathan N 

私は(dfdf2)で見つかったinitials列の値を比較し、(df2で)名前をコピーしたいです最初のデータフレームの最初(df

import pandas as pd 

for i in df.initials: 
    for j in df2.initials: 
     if i == j: 
     # copy the name value of this particular initial to df 

は、出力は次のようにすべきである:

 id name 
0 100 Johon 
1 200 Smith 
2 300 

どのようにこの問題を解決するか?

答えて

1

df3 = df.merge(df2,on='initials', 
        how='outer').drop(['initials'],axis=1).dropna(subset=['id']) 
>>> df3 
     id name 
0 100.0 John 
1 200.0 Smith 
2 300.0  NaN 

?:そんなに「イニシャル」列が削除されたので、「ID」欄のnp.nanを使って何がどのように。

あなたは.fillna()であっタックでnp.nanをしたくない場合は、次の

df3 = df.merge(df2,on='initials', 
        how='outer').drop(['initials'],axis=1).dropna(subset=['id']).fillna('') 
>>> df3 
     id name 
0 100.0 John 
1 200.0 Smith 
2 300.0 
2
df1 
    id initials                                        
0 100  J                                        
1 200  S                                        
2 300  Y 

df2 
    name initials                                        
0 John  J                                        
1 Smith  S                                        
2 Nathan  N 

使用ブールマスクを:df2.initials==df1.initialsが同じである2つのinitials列にどの値を教えてくれます。

0  True                                          
1  True                                          
2 False 

使用このマスクを新しい列を作成するには:fillna(' ')

df1.fillna('', inplace=True) #inplace to avoid creating a copy 

    id name                                         
0 100 John                                         
1 200 Smith                                         
2 300 
を使用して NaNを交換し

df1.drop('initials', axis=1) 

df1initials列を削除

df1['name'] = df2.name[df2.initials==df1.initials] 

を0

関連する問題