我有一个数据框和一个带有管理员/操作名称的参考表,我想加入“MNGR”,我认为这是一对多的关系。我不需要 DF2 中的任何其他列,但显然需要引用“MNGR”作为我的连接索引。
编辑:请注意,我已经完成了 Merging 101 并且无法找到适用于此处的答案。
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 全部为空。
我的预期结果:
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
答案 0 :(得分:1)
pandas.DataFrame.merge
或 pandas.merge
pandas.DataFrame.join
用于组合索引上的数据帧。import pandas as pd
# sample dataframes
DF1 = pd.DataFrame({'EMPLID': [12, 13, 14, 15, 16, 17], 'MNGR': ['BOB', 'JIM', 'RHONDA', 'RHONDA', 'JIM', 'RHONDA'], 'YEAR': [2012, 2013, 2012, 2012, 2012, 2012], 'V1': ['x', 'x', 'x', 'x', 'x', 'x'], 'V2': ['y', 'y', 'y', 'y', 'y', 'y'], 'V3': ['z', 'z', 'z', 'z', 'z', 'z'], 'V4': ['a', 'a', 'a', 'a', 'a', 'a']})
DF2 = pd.DataFrame({'MNGR': ['BOB', 'JIM', 'RHONDA'], 'ADMIN/OP': ['ADMINISTRATIVE', 'OPERATIONS', 'ADMINISTRATIVE'], 'YEAR': [2000, 2013, 2012], 'TRACT': ['A', 'B', 'A']})
# verify there is not whitespace in the column names
DF1.columns = DF1.columns.str.strip()
DF2.columns = DF2.columns.str.strip()
# merge the dataframes
df = DF1.merge(DF2[["MNGR","ADMIN/OP"]], on='MNGR', how='left')
# display(df)
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