Python 将dataframe合并到dataframe列表,排除合并中与列表中的prevoius表成功匹配的行
我有一个主数据框,其中有列['UniqueID','Col1','Col2] 我还有一个数据帧列表Python 将dataframe合并到dataframe列表,排除合并中与列表中的prevoius表成功匹配的行,python,pandas,Python,Pandas,我有一个主数据框,其中有列['UniqueID','Col1','Col2] 我还有一个数据帧列表[Table1,Table2,Table3],列表中的每个数据帧只包含相同的两列:['UniqueID','JoinID']。JoinID列被设置为表的值,这样一旦它们合并回主数据帧,我就知道它们是从哪个表加入的。例如: masterDF = {'UniqueID': ['A1','A2','A3','A4','A5','A6'],'Col1':['a','b','c','d','e','f'],'
[Table1,Table2,Table3]
,列表中的每个数据帧只包含相同的两列:['UniqueID','JoinID']
。JoinID列被设置为表的值,这样一旦它们合并回主数据帧,我就知道它们是从哪个表加入的。例如:
masterDF = {'UniqueID': ['A1','A2','A3','A4','A5','A6'],'Col1':['a','b','c','d','e','f'],'Col2':['a','b','c','d','e','f']}
table1 = {'UniqueID': ['A1','A2','A3'],'JoinID': ['Table1', 'Table1','Table1'] }
table2 = {'UniqueID': ['A1','A3','A4'],'JoinID': ['Table2', 'Table2','Table2'] }
table3 = {'UniqueID': ['A3','A4','A5'],'JoinID': ['Table3', 'Table3','Table3']}
我想做的是按照特定的顺序遍历列表,并将masterDF连接到每个表,但是,如果一行以前与列表中的一个表匹配,从而不将其包含在连接中。例如,合并的预期输出为:
for table in tables:
(merge each table, omitting rows which have already joined to a previous table)
output = {'UniqueID': ['A1','A2','A3','A4','A5','A6'], 'Col1':['a','b','c','d','e','f'],
'Col2':['a','b','c','d','e','f'], 'JoinID':['Table1','Table1','Table1','Table2','Table3',nan]}
我也理解merge可能不是最好的连接方法,因为它会导致'JoinID'列在每次连接后都加上后缀'JoinID_x'和'JoinID_y'
是否有一种简洁且相对有效的方法来实现这一点?这是一种使用+ 输出
print(output)
UniqueID Col1 Col2 JoinID
0 A1 a a Table1
1 A2 b b Table1
2 A3 c c Table1
3 A4 d d Table2
4 A5 e e Table3
5 A6 f f NaN
print(output)
UniqueID Col1 Col2 JoinID
0 A1 a a Table1
1 A2 b b Table1
2 A3 c c Table1
3 A4 d d Table2
4 A5 e e Table3
5 A6 f f NaN