Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.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_For Loop - Fatal编程技术网

Python 两个数据帧

Python 两个数据帧,python,pandas,for-loop,Python,Pandas,For Loop,我在做一些我知道我不应该做的事情。我在做for循环中的for循环,当我写下来的时候,听起来更可怕。基本上,我想做的是,理论上,使用两个数据帧是这样的: for index, row in df_2.iterrows(): for index_1, row_1 in df_1.iterrows(): if row['column_1'] == row_1['column_1'] and row['column_2'] == row_1['column_2'] and row

我在做一些我知道我不应该做的事情。我在做for循环中的for循环,当我写下来的时候,听起来更可怕。基本上,我想做的是,理论上,使用两个数据帧是这样的:

for index, row in df_2.iterrows():
    for index_1, row_1 in df_1.iterrows():
        if row['column_1'] == row_1['column_1'] and row['column_2'] == row_1['column_2'] and row['column_3'] == row_1['column_2']:
            row['column_4'] = row_1['column_4']

必须有更好的方法来做这样的事情。请帮忙

正如@Andy Hayden在中指出的那样,您可以使用difflib:get_nexist_matches函数来创建新的联接列

import difflib
df_2['fuzzy_column_1'] = df_2['column_1'].apply(lambda x: difflib.get_close_matches(x, df_1['column_1'])[0])
# Do same for all other columns
现在可以使用合并函数应用内部联接

result_df = df_1.merge(df_2,left_on=['column_1', 'column_2','column_3'], and right_on=['fuzzy_column_1','fuzzy_column_2','fuzzy_column_3] )

您可以使用drop函数删除不需要的列。

您可以对这些列进行内部联接,然后获得包含所有所需行的新df。另一个复杂的问题是,我可能需要做一些模糊字符串匹配列的拼写错误。在这种情况下,内部连接不是我的选择。谢谢!我正在考虑使用fuzzwuzz模块,但这似乎更好。很抱歉反应太晚。我认为这是可行的,但要想获得最接近的匹配就必须做出选择,有时这对我来说并不合适。所以我又开始使用fuzzyfuzzy了。