Python 熊猫:在具有不同索引的数据帧上进行一对多连接

Python 熊猫:在具有不同索引的数据帧上进行一对多连接,python,pandas,Python,Pandas,我有一个数据框架和一个带有管理/操作指定的参考表,我想加入“MNGR”,我相信这是一种一对多关系。我不需要DF2中的任何其他列,但显然需要引用“MNGR”作为连接的索引 编辑:请注意,我已经通过了,还没有找到一个适用于这里的答案 DF1 = EMPLID MNGR YEAR V1 V2 V3 V4 12 BOB 2012 x y z a 13 JIM

我有一个数据框架和一个带有管理/操作指定的参考表,我想加入“MNGR”,我相信这是一种一对多关系。我不需要DF2中的任何其他列,但显然需要引用“MNGR”作为连接的索引

编辑:请注意,我已经通过了,还没有找到一个适用于这里的答案

DF1 = EMPLID  MNGR        YEAR     V1     V2     V3     V4
      12      BOB         2012     x      y      z      a
      13      JIM         2013     x      y      z      a
      14      RHONDA      2012     x      y      z      a
      15      RHONDA      2012     x      y      z      a
      16      JIM         2012     x      y      z      a
      17      RHONDA      2012     x      y      z      a

DF2 = MNGR      ADMIN/OP        YEAR       TRACT
      BOB       ADMINISTRATIVE  2000       A
      JIM       OPERATIONS      2013       B
      RHONDA    ADMINISTRATIVE  2012       A
几年前,我在SQL中通过一对多连接执行了此操作,但我似乎无法理解此功能如何转换为python:

DF1.join(DF2.set_index('MNGR'), on='MNGR')
这会通过,但会产生DF2连接的结果,并且ADMIN/OP全部为null

我的预期结果:

DF1 = EMPLID  MNGR        YEAR     V1     V2     V3     V4    ADMIN/OP
      12      BOB         2012     x      y      z      a     ADMINISTRATIVE
      13      JIM         2013     x      y      z      a     OPERATIONS
      14      RHONDA      2012     x      y      z      a     ADMINISTRATIVE
      15      RHONDA      2012     x      y      z      a     ADMINISTRATIVE
      16      JIM         2012     x      y      z      a     OPERATIONS
      17      RHONDA      2012     x      y      z      a     ADMINISTRATIVE
  • 这本质上是一个合并问题,在中有介绍,但是,数据帧可能需要在合并之前进行清理
  • 清除列标题,然后合并数据帧
    • 这可以通过或来实现
    • 用于在索引上组合数据帧
将熊猫作为pd导入
#示例数据帧
DF1=pd.DataFrame({'EMPLID':[12,13,14,15,16,17],'MNGR':['BOB','JIM','RHONDA','RHONDA','JIM','RHONDA','YEAR':[2012,2013,2012,2012,2012,2012,2012,2012],'V1':[x','x','x','x','x','x','V2:[y','y','y','y','y','y','V3','z','z','z','z','z','V4':['a','a','a']
DF2=pd.DataFrame({'MNGR':['BOB','JIM','RHONDA'],'ADMIN/OP':['ADMINISTRATIVE','OPERATIONS','ADMINISTRATIVE'],'YEAR':[2000,2013,2012],'TRACT':['A','B','A'])
#验证列名中没有空格
DF1.columns=DF1.columns.str.strip()
DF2.columns=DF2.columns.str.strip()
#合并数据帧
df=DF1.merge(DF2[[“MNGR”,“ADMIN/OP”]],on='MNGR',how='left')
#显示(df)
EMPLID MNGR第1年第2版第3年第4版管理员/操作
2012年10月12日x y z a行政
13吉姆2013 x y z a运营
14朗达2012 x y z a行政
15朗达2012 x y z a行政区
16吉姆2012 x y z a运营
17朗达2012 x y z a行政区