2017-01-25 8 views
1

にI 2つのデータフレームを有する:コピー行の値()パンダ

df_a = pd.DataFrame({'A':[1,2,3,4],'B':[4,5,6,7],'ID':['a','b','c','d']}) 
df_a  
    A B ID 
0 1 4 a 
1 2 5 b 
2 3 6 c 
3 4 7 d 
df_b = pd.DataFrame({'A':[1,2,3],'ID':['b','a','c']}) 
df_b['CopyB'] = "" 
    A ID CopyB 
0 1 b 
1 2 a 
2 3 c 

今は両方のデータフレーム内のID列と一致すると成功したマッチの際に、Iは、それぞれの値をコピーするのBのdf_aからdf_b ['CopyB']へ。私はdf_b.loc[df_b['ID'].isin(df_a['ID']),'Copy']= df_a['B] を試しましたが、それは正しくありません。それから私は '=='を使ってIDを比較しようとしましたが、IDシリーズの長さが等しくないのでエラーが発生しました。どんな助け?それは非常に些細なクエリです場合は申し訳ありません。

+1

あなたの予想される出力は何ですか? – Zero

答えて

0

あなたはインデックスのmerge

In [247]: df_b.merge(df_a, on=['ID']) 
Out[247]: 
    A_x ID A_y B 
0 1 b 2 5 
1 2 a 1 4 
2 3 c 3 6 

In [248]: df_b.merge(df_a, on=['ID'])[['A_x', 'ID', 'B']].rename(columns={'A_x': 'A'}) 
Out[248]: 
    A ID B 
0 1 b 5 
1 2 a 4 
2 3 c 6 
+0

ありがとうジョン。それは本当に助けになりました。 – sacmax

1

使用join

df_b.join(df_a.set_index('ID').B, on='ID') 

    A ID B 
0 1 b 5 
1 2 a 4 
2 3 c 6 

join作品を使用することができます。だからdf_aのインデックスをIDの列に設定し、df_a.set_index('ID').Bが値として追加する列とインデックスとしてマージ列を追加するようにB列にアクセスします。次に私はjoinを使用します。 IDdf_bのインデックスだった場合は、onパラメータを指定する必要はありませんが、そうではありません。

+0

ありがとうたくさんのpiRSquared ...それは魅力のように動作します – sacmax

+0

@sacmax緑色のチェックで答えとしてマークするのを忘れないでください。 – piRSquared

0

あなたは、両方のデータフレームのための共通の指標として、ID列を設定する場合は、簡単に列を追加することができます。

df_a = df_a.set_index('ID') 
df_b = db_b.set_index('ID') 

df_b['Copy B'] = df_a['B']