【发布时间】:2020-06-17 05:30:21
【问题描述】:
假设这是 CSV1:
开始日期 |结束日期 |项目 | 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:
CSV2开始日期 | CSV2ENDDATE |项目编号
1998-09-27 | 9999-12-31 | 100000
1999-10-27 | 9999-12-31 | 100001
我想根据它们的列加入这些表,特别是它们的差异中的 STARTDATE、ENDDATE 或 ITEMID,以显示它们是否是数据帧独有的差异。我分别缩短了原始数据帧 csv1 和 csv2,因为它们包含 5000+ 行,因此数据显示整齐会有好处。
这些是我想要产生的结果 Left Join Null(又名 CSV1 独占):
开始日期 |结束日期 |项目 | CSV1UQID
1999-09-27 | 9999-12-31 | 100000 | 121(此行在左连接中,为空,因为与 CSV2STARTDATE 相比,CSV1 的开始日期是唯一的)
1222-09-27 | 9999-12-31 | 999999 | 125(因为所有参数都是CSV1独有的)
但是,到目前为止,我的代码是左连接(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()')
但这只会产生:
开始日期 |结束日期 |项目 | CSV1UQID
1222-09-27 | 9999-12-31 | 999999 | 125
因为它只查看 ITEMID 差异,而不是日期。我该如何解决这个问题,使其成为预期的结果?
查看具有 >>
的行
【问题讨论】: