Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于相似字段与实际匹配的数据帧联接/合并_Python_Pandas - Fatal编程技术网

Python 基于相似字段与实际匹配的数据帧联接/合并

Python 基于相似字段与实际匹配的数据帧联接/合并,python,pandas,Python,Pandas,有两个数据集,我将它们从Teradata拉入Pandas数据帧 tables=pd.DataFrame(session.execute("select databasename as source_db, tablename as source_obj, databasename||'.'||tablename as full_tablename, tablekind as source_obj_kind from dbc.tables").fetchall()).set_index('data

有两个数据集,我将它们从Teradata拉入Pandas数据帧

tables=pd.DataFrame(session.execute("select databasename as source_db, tablename as source_obj, databasename||'.'||tablename as full_tablename, tablekind as source_obj_kind from dbc.tables").fetchall()).set_index('databasename')
tvm=pd.DataFrame(session.execute("select tvmname target_obj, tablekind target_obj_kind, createtext from dbc.tvm").fetchall()).set_index('createtext')
我试图在这两个项目之间运行一个连接,该连接等效于以下语法(teradata sql):

用外行的话说,如果表中的完整_databasename(source|db| |'.| source|obj)位于tvm中的createtext列中,则创建一个新的dataframe

我试图避免编写两个for语句,这些语句将检查表中的每一行,并手动将其与tvm中的每一行进行比较


谢谢大家!

你看过吗?它只有一行,但您需要知道联接列名。您可以合并或合并。我不熟悉teradata sql,但如果您编写ansi sql,我可能可以将其转换为pandas。请注意,在使用此功能之前,您需要重命名键以使其完全相同,您可以在=['a','b']
merge上使用多个键(左,右,how='internal',on=None,左,右=None,右=None,左=False,右=False,sort=True,后缀=('ux','uy'),copy=True,indicator=False)
谢谢大家。请注意,这不是真正的联接,而是松散联接。要查找匹配项,source|db | |'。| | source|obj的值必须位于createtext字段内。这意味着它不是concat、merge、join。如果我执行完全外部联接(merge how='outer'))然后,我必须迭代每一行,以查看createtext中是否有完整的tablename。您看过吗?这是一行,但您需要知道联接列名。您可以合并或合并。我不熟悉teradata sql,但如果您编写ansi sql,我可能可以转换为pandas。注意,在使用此命令之前,您需要重命名键,使它们成为从本质上讲,您可以有多个on=['a','b']
merge(左、右、how='inner',on=None,左、右、左、右、左、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、右、
谢谢大家。请注意,这不是真正的联接,而是松散联接。要找到匹配项,source|db | | |'。| | source|obj的值必须位于createtext字段内。这意味着它不是concat、merge、join。如果我进行完整的外部联接(merge how='outer'),那么我必须遍历每一行,以查看createtext中是否有完整的表格名。
tvm.createtext like '%"' !! trim (tables.source_db) !! '"."'!! trim (tables.source_obj)!! '"%' (not cs)