2016-09-19 62 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_duplicates

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 

另一種解決方案與mergeDataFrame.drop_duplicatesDataFrame.drop

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

謝謝你的回覆。但它給了我一個錯誤「Reindexing只對唯一有價值的索引對象有效」 –

+0

請參閱編輯。我添加了'.drop_duplicates()' – jezrael

+0

這並沒有很好的規模 –

1

你可以用merge做到這一點:

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

如果名稱是索引列,你可以只是做一個join

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

更完整的例子,你可以看看上面/低於還跟闡述我的回答的答案。