我正在做一些我知道我不应该做的事情。我正在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']
必须有一种(更好的)方法来做这样的事情。请帮忙!
答案 0 :(得分:0)
正如@Andy Hayden在is it possible to do fuzzy match merge with python pandas?中指出的那样,您可以使用difflib
:get_closest_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
现在,您可以使用pandas merge
函数来应用内部联接。
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
功能删除不需要的列。