У меня есть два кадра данных pandas. Я хочу присоединиться/слить точно по нескольким столбцам (скажем, 3) и приблизительно, то есть ближайшему соседу, на один столбец (дата) , Я также хочу вернуть разницу (дни) между ними. Каждый набор данных составляет около 50 000 строк. Меня больше всего интересует внутреннее соединение, но «остатки» также интересны, если не слишком сложно овладеть. Большинство наблюдений «точное совпадение» будут существовать несколько раз в каждом кадре данных.Pandas: Приблизительное соединение по одному столбцу, точное совпадение с другими столбцами
Я пытался использовать difflib.get_close_matches на конкатенации всех из них в виде строк (что это глупо, я знаю!), Но это не всегда дает точные совпадения. Я полагаю, что нужно перебрать точные совпадения, а затем найти ближайшие матчи в рамках этой группы, но я просто не могу показаться, чтобы получить это право ...
The dataframes выглядеть примерно так:
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
Это может иметь смысл задавать отдельные вопросы для каждой из вещей, которые вы ищете. – fmarc