假设我有以下两个表。请注意,第二个表格延长了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)来执行此操作,但有时我不想使用内部联接。
答案 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)]