连接表或将值从一个表映射到另一个表

时间:2019-05-16 23:02:07

标签: python pandas

我有两个数据框,我想在这些数据框中将较小的df映射到较大的df。较大的df是5000行,我想根据较小的表中的条件加入。例如,较大的数据框是:

status    type    slot    br
2         1       2       5
2         1       1       5
2         1       2       5
2         1       2       5
2         1       56       26
2         1       76       5

第二个数据帧如下:

slot    name    from   to     br
1       4PM     16     19     5
2       7PM     19     22     5
3       10PM    10     12     5
76      1PM     13     16     5
56      Lun     12     14     26

所以基本上我想将第二个数据帧中的列映射到第一个数据列中的“ slot”和“ br”这两个列,以便最终结果将如下所示在两者之间建立连接:

status    type    slot    br    name    from   to
2         1       2       5     7PM     19     22
2         1       1       5     4PM     16     19
2         1       2       5     7PM     19     22
2         1       2       5     7PM     19     22
2         1       56      26    Lun     12     14
2         1       76      5     1PM     13     16

我尝试使用if语句,但给了我一个错误。尽管我认为需要使用联接的更有效解决方案,或者if也应该很好

2 个答案:

答案 0 :(得分:0)

这是一个简单的合并,在这种情况下,how参数指定了合并的工作方式。

new_df = pd.merge(df,df2,on=['slot','br'],how='left')
print(new_df)
    status  type    slot    br  name    from    to
0   2   1   2   5   7PM 19  22
1   2   1   1   5   4PM 16  19
2   2   1   2   5   7PM 19  22
3   2   1   2   5   7PM 19  22
4   2   1   56  26  Lun 12  14
5   2   1   76  5   1PM 13  16

我会提醒您先了解合并的工作方式,然后再进行进一步的操作,请查看LiquidCore

答案 1 :(得分:0)

这应该有效:

df = pd.DataFrame({'status': [2, 2, 2, 2, 2, 2],
          'type': [1, 1, 1, 1, 1, 1],
          'slot': [2, 1, 2, 2, 56, 76],
          'br': [5.0, 5.0, 5.0, 5.0, 26.0, np.nan]})
df2 = pd.DataFrame({'slot': [1, 2, 3, 76, 56],
          'name': ['4PM', '7PM', '10PM', '1PM', 'Lun'],
          'from': [16, 19, 10, 13, 12],
          'to': [19, 22, 12, 16, 14],
          'br': [5, 5, 5, 5, 26]})

print(df.merge(df2,on=['slot','br'],how='left'))

   status  type  slot    br name  from    to
0      2     1     2   5.0  7PM  19.0  22.0
1      2     1     1   5.0  4PM  16.0  19.0
2      2     1     2   5.0  7PM  19.0  22.0
3      2     1     2   5.0  7PM  19.0  22.0
4      2     1    56  26.0  Lun  12.0  14.0
5      2     1    76   NaN  NaN   NaN   NaN