2016-09-19 98 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']]) 

更完整的例子,你可以看看上面/低于还跟阐述我的回答的答案。