2016-09-19 4 views
1

私は2つのデータセットを得ました。df1はすべての果物の色があり、df2はありません。果物名に応じてd1の色データに基づいてdf2の色の値をマップするにはどうすればよいですか?他のデータセットからのデータのマッピング。 Python Pandas

   df1         df2 
Name    Color    Name    Color 
Apple    Red    Orange   Na 
Orange    Orange   Coconut   Na 
Pear    Pear    Pear    Na 
Pear    Pear    Strawberries  Na 
Papaya    Papaya   Banana   Na 
Watermelon   Watermelon  Papaya   Na 
       "     "     "     " 

答えて

1

私はあなたがmapを使用することができると思いますが、まず必要Series.drop_duplicatesDataFrame.drop_duplicatesmergeDataFrame.drop

df2['Color'] = df2['Name'].map(df1.set_index('Name')['Color'].drop_duplicates()) 
print (df2) 
      Name Color 
0  Orange Orange 
1  Coconut  NaN 
2   Pear Pear 
3 Strawberries  NaN 
4  Banana  NaN 
5  Papaya Papaya 

別の解決策:

df2 = pd.merge(df2.drop('Color', axis=1),df1.drop_duplicates(), how='left') 
print (df2) 
      Name Color 
0  Orange Orange 
1  Coconut  NaN 
2   Pear Pear 
3 Strawberries  NaN 
4  Banana  NaN 
5  Papaya Papaya 
+0

ありがとうございます。しかし、それは私に "一意にインデックス付けされた一意の索引オブジェクトでのみ有効なインデックス"というエラーを返しました –

+0

編集を参照してください。私は '.drop_duplicates()'を追加します – jezrael

+0

これはうまくスケールされません –

1

あなたはmergeでこれを行うことができます。

df2 = df2.merge(df1, on="Name", how="left", suffixes=('_1','_2')) 

名はあなただけjoinを行うことができ、あなたのインデックス列の場合:より完全なたとえば

df2 = df2.join(df1[['color']]) 

あなたがその下に親切にも私の答えについては詳しく説明しました/上記の回答を見ることができます。

関連する問題