首页 > 解决方案 > df.loc 具有跨两个不同数据源的两个条件

问题描述

我有两张我正在尝试进行数据处理的excel表。

表 A

SN    Date(M/D/Y) Values
001   1/1/2021    A
002   1/1/2021    B
003   1/1/2021    C
004   1/1/2021    C

表 B

SN    Date
001   2/1/2021
002   12/1/2020
003   1/20/2021

目的是使用工作表 B 中的值过滤工作表 A 的结果。具体有两个条件:

  1. 表 A 中的 SN 必须存在于表 B 中
  2. 对于相应的 SN,表 A 上的日期必须晚于表 B

因此预期的结果应该是这样的:

SN    Date(M/D/Y) Values
002   1/1/2021    B

现在我试图用它来找到它:

value = sheetA.loc[(sheetA['SN'].isin(sheetB['SN'])) & sheetA['Date'] > sheetB['Date']]

但是,我收到 ValueError: Can only compare the same-labeled Series objects。我该怎么做呢?

标签: excelpandasdataframe

解决方案


我认为您可以merge使用它们并比较类似日期的列。然后只保留满足条件的行(并在最后删除Date来自另一个的行):

merged = sheetA.merge(sheetB)

condition = merged["Date(M/D/Y)"] > merged["Date"]

result = merged[condition].drop(columns="Date")

要得到

>>> result

   SN Date(M/D/Y) Values
1   2  2021-01-01      B

推荐阅读