У меня есть два кадра данных pandas, которые я хочу соединить/объединить точно по количеству столбцов (скажем, 3) и приблизительно, то есть по ближайшему соседу, по одному столбцу (дата). Я также хочу вернуть разницу (дни) между ними. Каждый набор данных содержит около 50 000 строк. Меня больше всего интересует внутреннее соединение, но «остатки» также интересны, хотя и не слишком сложны для получения. Большинство наблюдений «точного совпадения» будут существовать несколько раз в каждом фрейме данных.
Я пытался использовать difflib.get_close_matches для объединения всех из них в виде строк (что глупо, я знаю!), но это не всегда дает точные совпадения. Я полагаю, мне нужно сначала перебрать точные совпадения, а затем найти ближайшие совпадения в этой группе, но я просто не могу понять это правильно...
Кадры данных выглядят примерно так:
df1 = pd.DataFrame({'index': ['a1','a2','a3','a4'], 'col1': ['1232','432','432','123'], 'col2': ['asd','dsa12','dsa12','asd2'], 'col3': ['1','2','2','3'], 'date': ['2010-01-23','2016-05-20','2010-06-20','2008-10-21'],}).set_index('index')
df1
Out[430]:
col1 col2 col3 date
index
a1 1232 asd 1 2010-01-23
a2 432 dsa12 2 2016-05-20
a3 432 dsa12 2 2010-06-20
a4 123 asd2 3 2008-10-21
df2 = pd.DataFrame({'index': ['b1','b2','b3','b4'], 'col1': ['132','432','432','123'], 'col2': ['asd','dsa12','dsa12','sd2'], 'col3': ['1','2','2','3'], 'date': ['2010-01-23','2016-05-23','2010-06-10','2008-10-21'],}).set_index('index')
df2
Out[434]:
col1 col2 col3 date
index
b1 132 asd 1 2010-01-23
b2 432 dsa12 2 2016-05-23
b3 432 dsa12 2 2010-06-10
b4 123 sd2 3 2008-10-21
В конце концов, я хочу что-то вроде:
col1 col2 col3 date diff match_index
index
a1 1232 asd 1 2010-01-23 nan nan
a2 432 dsa12 2 2016-05-20 -3 b2
a3 432 dsa12 2 2010-06-20 10 b3
a4 123 asd2 3 2008-10-21 nan nan
a5 123 sd2 3 2008-10-21 nan b4
или, если это проще, только с внутренним соединением, я бы хотел:
col1 col2 col3 date diff match_index
index
a2 432 dsa12 2 2016-05-20 -3 b2
a3 432 dsa12 2 2010-06-20 10 b3