首页 > 解决方案 > Python Pandas:与多列等效的 vlookup

问题描述

这个问题与一个旧问题非常相似,但有一个重要区别:我有一个基于多列的键。无论如何,就像在链接的问题中一样,我不想要一个merge2 个数据框,而是insert一个新列(基于vlookup等价)。作为一个具体的例子,假设我有一个数据框df2.dtypes

Fruit    object
Qty       int64
Year      int64

和另一个数据框df3.dtypes

Manager    object
Fruit      object
Year        int64

Fruit我假设我可以为他们两个人构建一个密钥Year。我试过做

df2.insert(1, 'Manager', df2.set_index(['Fruit','Year']).map(df2.set_index(['Fruit','Year'])['Manager']))

但我越来越

AttributeError: 'DataFrame' object has no attribute 'map'

我该如何改写它(为了绕开问题)?

标签: pythonpandasdataframevlookup

解决方案


好吧,您非常接近解决方案,但让我先总结一下您尝试做的事情,直到它是正确的为止。因此,您确实可以(根据您的假设)构建数据框的索引版本df2

df2indexed = df2.set_index(['Fruit', 'Year'])

以及其他数据框df3

df3indexed = df3.set_index(['Fruit', 'Year'])

到目前为止一切顺利,现在您唯一缺少的部分是您不能map直接将 a 应用于 a DataFrame,但是......您可以对其执行此操作index

insertManager = df2indexed.index.map(df3indexed.Manager)

总之,您将根据需要添加上述新列:

df2indexed.insert(1,'Manager', insertManager)

推荐阅读