Python 将一个数据帧中的匹配值替换为另一个数据帧中的索引值

Python 将一个数据帧中的匹配值替换为另一个数据帧中的索引值,python,pandas,dataframe,Python,Pandas,Dataframe,我想用df2['ID']中相应的ID替换df1['fruit']中的果串。实际上,我正在尝试创建一个水果查找表 df1 水果 商店 价格 苹果 赫布 0.99 橙色 赫布 0.69 苹果 克罗格 0.88 苹果 沃尔玛 0.89 香蕉 赫布 0.59 香蕉 沃尔玛 0.59 橙色 克罗格 0.39 这可能不是最具python风格的方法,而且肯定有内置函数来实现这一点(我鼓励您查看文档),但这里有一个可行的解决方案 可以通过创建映射函数并将其应用于列来实现这一点 映射函数: df1['fruit'

我想用df2['ID']中相应的ID替换df1['fruit']中的果串。实际上,我正在尝试创建一个水果查找表

df1

水果 商店 价格 苹果 赫布 0.99 橙色 赫布 0.69 苹果 克罗格 0.88 苹果 沃尔玛 0.89 香蕉 赫布 0.59 香蕉 沃尔玛 0.59 橙色 克罗格 0.39
这可能不是最具python风格的方法,而且肯定有内置函数来实现这一点(我鼓励您查看文档),但这里有一个可行的解决方案

可以通过创建映射函数并将其应用于列来实现这一点

映射函数:

df1['fruit'] = df1['fruit'].apply(mapping)
  • fd2
  • 如果存在,则返回关联值;如果不存在,则返回原始值
下面是函数:

def mapping(x):
    mapping_dict = df2.set_index("fruit")['id']
    try:
        return mapping_dict[x]
    except:
        return x #or whatever to indicate that the fruit is not in df2
将其应用于df1:

df1['fruit'] = df1['fruit'].apply(mapping)
尝试:


关于这一点,已经有很多话题了
df2['fruit'].map(df1.set_index('fruit')['id'])
df1.merge(df2,on='fruit')
谢谢@QuangHoang,但这会导致一个
keyrerror:'id'
谢谢@anuragdab,因为这非常接近我想要的,如果没有更好的方法,我可以使用它。是否可以在不必删除df1['fruit']并将新添加的df1['id']列重命名为'fruit'的情况下执行此类操作?顺便说一句,您不需要删除df1['fruit']并将新添加的df1['id']列重命名为'fruit?…我的意思是……对不起,我不明白:(感谢您的帮助。这很有效!我发现如果行中的一个值等于None,此解决方案会将整个列的数据类型从int更改为float。您知道为什么会这样做吗?因为pandas中的NAN不能用int表示。您可以使用df[]。as_type('INT32')或df=df.convert_dtypes()好的,再次感谢你的帮助!