python - Python Pandas:与多列等效的 vlookup
问题描述
这个问题与一个旧问题非常相似,但有一个重要区别:我有一个基于多列的键。无论如何,就像在链接的问题中一样,我不想要一个merge
2 个数据框,而是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'
我该如何改写它(为了绕开问题)?
解决方案
好吧,您非常接近解决方案,但让我先总结一下您尝试做的事情,直到它是正确的为止。因此,您确实可以(根据您的假设)构建数据框的索引版本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)
推荐阅读
- python - 保持套接字打开直到客户端终止
- json - 如何通过传递输入键使用jq从json中提取特定字段值
- javascript - 为什么在源代码上看不到 DOM 结构?
- image - 如何从 Steam 游戏中获取图片的哈希?
- ruby - 如何在 Ruby 中编写一个方法,将传入的字符串增加 X 个随机字符
- java - 从目录路径获取android uri
- webpack - Webpack-dev-server 插件点击钩子
- c++ - 使用 OpenCV 2.4.9 构建 ROS 包时出现问题
- python - 让 Pandas 找到缺失值并显示它们
- reactjs - 如何将我的 sass 变量分配给所有 React 组件?