如何根据具有公共信息的不同数据框中另一列的值在数据框中创建新列?

How can I create a NEW column in a dataframe based on values of another column in a DIFFERENT dataframe that have common information?

我有一个数据框:

这是为了工作,所以我只是让它变得简单,并在其中放入最少量的数据,我称之为数据:

| induction date |    shop        |
| -------------- | -------------- |
|2021-07-18      | AD9            |
| 2021-07-26     | DL9            |

我想添加一个名为 WIP 的第三列,它根据入职日期和 SHOP 的匹配从这种格式的另一个数据帧(多索引)中获取 WIP,我称之为 WIP:

                                  |  WIP  |
                                  |-------|
| date           |    shop        |       |
| -------------- | -------------- |       |
| 2021-07-18     | AD9            |   7   |
| 2021-07-26     | DL9            |   3   |

虽然我运气不好,但我尝试将 WIP 数据帧转换为字典并使用地图,但它不起作用,我遇到了一个关键错误。不知道是多级索引的问题还是什么,卡住了

我还尝试通过引用 WIP 数据框和原始列来分配它,如下所示:

data['WIP']=WIPbyShop.loc[data['DATE_INDUCTED', 'SHOP']].WIP

但这给了我一个关键错误。任何 ideas/suggestions 将不胜感激!我觉得应该有一个非常简单的方法来做到这一点,就像我把它复杂化了一样。

我们可以尝试 join 指定 on 关键字参数来告诉它将 MultiIndex 与 data 中的列对齐:

data = data.join(WIPbyShop['WIP'], on=['induction date', 'shop'])

data:

  induction date shop  WIP
0     2021-07-18  AD9    7
1     2021-07-26  DL9    3

设置:

import pandas as pd

data = pd.DataFrame({
    'induction date': ['2021-07-18', '2021-07-26'], 
    'shop': ['AD9', 'DL9']
})

# Reversed DataFrame rows to show alignment
WIPbyShop = pd.DataFrame({
    'date': ['2021-07-26', '2021-07-18'], 
    'shop': ['DL9', 'AD9'],
    'WIP': [3, 7]
}).set_index(['date', 'shop'])
# data
  induction date shop
0     2021-07-18  AD9
1     2021-07-26  DL9

# WIPbyShop
                 WIP
date       shop     
2021-07-26 DL9     3
2021-07-18 AD9     7