从另一个数据帧过滤pandas数据帧

时间:2018-05-25 17:05:36

标签: python pandas dataframe

假设我有以下两个表。请注意,第二个表格延长了15天到2月份:

dates1 = pd.DataFrame(data=pd.date_range('2018-1-1 00:00', '2018-1-31 23:59', freq='h'), columns=['date'])
dates2 = pd.DataFrame(data=pd.date_range('2018-1-1 00:00', '2018-2-15 23:59', freq='h'), columns=['date'])

我想根据第一个数据帧中的最新日期过滤第二个数据帧。在这里,我从dates1表中找到最近的日期。结果是时间戳:

most_recent_dates1 = dates1['date'].max()
Timestamp('2018-01-31 23:00:00')

然后我尝试按如下方式过滤第二个表:

dates3 = dates2[[dates2['date'] <= most_recent_dates1]]

但是我收到以下错误:

ValueError: Item wrong length 1 instead of 1104.

如何使用另一个表中的一个时间戳过滤表而不会出现此错误?我知道我可以使用内部联接(pandas.merge)来执行此操作,但有时我不想使用内部联接。

2 个答案:

答案 0 :(得分:2)

Pandas数据帧索引允许布尔系列/数组作为输入。因此,您不需要使用系列的列表。您可以使用布尔系列直接索引:

dates3 = dates2[dates2['date'] <= most_recent_dates1]

如错误所示,您提供了一个长度为1的项目,而它期望一个项目的长度与您的数据帧相同。

有关详细信息,请参阅官方文档中的Boolean indexing

答案 1 :(得分:1)

你可以尝试使用应用功能

dates2[dates2.apply(lambda x: x['date'] <= most_recent_dates1,axis=1)]