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