2017-11-10 6 views
1

に基づいて、他のデータフレームから値を抽出するために、私はこの二つの列どのようにキーと現在のデータフレームに設定

df1 = pd.DataFrame([['A','h1',None],['B','h2',None],['C','h3',None]],columns=['id','HH','VV']) 

    id HH VV 
0 A h1 None 
1 B h2 None 
2 C h3 None 

df2 = pd.DataFrame([['A','XX',10],['B','XX',15],['B','YY',15],['A','ZZ',10],['C','GG',28]],columns=['id','NO','VV']) 
    id NO VV 
0 A XX 10 
1 B XX 15 
2 B YY 15 
3 A ZZ 10 
4 C GG 28 

を持っており、彼らは同じIDを持っている場合DF2で、「VV」の値が同じで、

私はDF1のVV値を設定したい

、DF2する検索するDF1のid値に応じて、私は私が

を使うべきだと思う

id HH VV 
0 A h1 10 
1 B h2 15 
2 C h3 28 

以下のような答え

keys = ['id'] 
df1.assign(VV=df1[keys].join(df2.set_index(keys).VV, on=keys).VV) 

それだけでidはDF2

答えて

2

で一意である場合は、keysの列(複数可)によって最初drop_duplicatesで重複を削除することができます動作します。

keys = ['id'] 
a = df1.assign(VV=df1[keys].join(df2.drop_duplicates(keys).set_index(keys).VV, on=keys).VV) 
print (a) 
    id HH VV 
0 A h1 10 
1 B h2 15 
2 C h3 28 
+0

ご連絡ありがとうございます。 –

1

ので、それを行うための他の方法があるかもしれません私は、両方のデータフレーム

new_df= pd.merge(df1,df2, on='id) 

をマージして、

コラムNOを落とします
new_df = new_df.drop('NO', axis=1) 

もう一度やり直すことができます。

乾杯!

+0

あなたの答えをありがとう、それを行うには良い方法です。 –

+0

よろしくお願いします! –

関連する問題