检查另一个熊猫数据框中存在哪些日期的最快方法

时间:2018-11-16 14:36:21

标签: python python-3.x pandas

我在不同的数据框中有两个datetime列,其中一个是常规日期,另一个是假期日期。 我想在第一个数据框中添加一个新列,说明该行中的日期是否是假期。

df = pd.DataFrame({'date': [pd.Timestamp("2018-01-01"), pd.Timestamp("2018-01-02")]})
holidays = pd.DataFrame({'date': [pd.Timestamp("2018-01-01"), pd.Timestamp("2018-12-25")]})

这是我当前的方法:

holiday_dates = holidays.date
df['holiday'] = df.date.map(lambda x: sum(holiday_dates.isin([x])) > 0)

它可以正常工作,在下面提供所需的输出,但是对于我大约100,000个条目的数据集来说,它的运行速度非常慢。

In[]: df
Out[]:
        date  holiday
0 2018-01-01     True
1 2018-01-02    False

是否有更有效的方法来执行此操作?

1 个答案:

答案 0 :(得分:2)

  

我想在第一个数据框中添加一个新列,说明该行中的日期是否是假期。

您应该可以直接使用.isin()

In [7]: df['holiday'] = df['date'].isin(holidays['date'])                       

In [8]: df                                                                      
Out[8]: 
        date  holiday
0 2018-01-01     True
1 2018-01-02    False