1 [
] 1
Допустим, это CSV1:
STARTDATE | ENDDATE | ПУНКТ | CSV1UQID
1999-09-27 | 9999-12-31 | 100000 | 121
1999-10-27 | 9999-12-31 | 100001 | 123
1222-09-27 | 9999-12-31 | 999999 | 125
и CSV2:
CSV2STARTDATE | CSV2ENDDATE | ITEMID
1998-09-27 | 9999-12-31 | 100000
1999-10-27 | 9999-12-31 | 100001
Я хотел бы объединить эти таблицы на основе их столбцов, в частности STARTDATE, ENDDATE или ITEMID в их различиях, чтобы показать, являются ли их различия уникальными для фреймов данных. Я сократил исходные фреймы данных csv1 и csv2 соответственно, поскольку они включают более 5000 строк, поэтому было бы хорошо, если бы данные отображались аккуратно.
Вот результаты, которые я хотел бы получить с нулевым левым соединением (иначе CSV1 эксклюзивы):
STARTDATE | ENDDATE | ПУНКТ | CSV1UQID
1999-09-27 | 9999-12-31 | 100000 | 121 (эта строка находится в левом соединении, null, потому что дата начала уникальна для CSV1 по сравнению с CSV2STARTDATE)
1222-09-27 | 9999-12-31 | 999999 | 125 (потому что все параметры уникальны для CSV1)
Однако пока мой код для left-join (null) таков:
csv1iID = csv1.set_index('ITEMID')
csv2iID = csv2.set_index('ITEMID')
CSV1only = csv1.join(
csv2iID,
on = 'ITEMID',
lsuffix = '_l',
rsuffix = '_r',
).query('ITEMID_r.isnull()')
Но это дает только:
STARTDATE | ENDDATE | ITEMID | CSV1UQID
1222-09-27 | 9999-12-31 | 999999 | 125
, потому что он смотрит только на различия ITEMID, а не на дату. Как я могу исправить это, чтобы получить желаемый результат?
См. Строку, в которой есть >>