Python 我正在尝试为日期列表指定假日分类器

Python 我正在尝试为日期列表指定假日分类器,python,pandas,datetime,data-manipulation,Python,Pandas,Datetime,Data Manipulation,我有两个数据帧,一个带有日期及其对应假日的列表(df2),另一个带有事务列表(df1)。我尝试使用第一个函数在第二个函数上标记假日,但每当我尝试创建一个函数并应用它时,它只会为所有内容返回空值 我使用的函数如下所示: def isHoliday(t, holiday_list): f = t.strftime('%Y-%m-%d') if(f in (holiday_list)): return 1 else:

我有两个数据帧,一个带有日期及其对应假日的列表(df2),另一个带有事务列表(df1)。我尝试使用第一个函数在第二个函数上标记假日,但每当我尝试创建一个函数并应用它时,它只会为所有内容返回空值

我使用的函数如下所示:

    def isHoliday(t, holiday_list):
        f = t.strftime('%Y-%m-%d')
        if(f in (holiday_list)):
            return 1
        else:
            return 0
当我尝试应用它时:

    df1.insert(3, 'isHoliday', df1['DATE'].apply(lambda x: isHoliday(x, 
    df2['DATE'])))
数据帧仅返回0。我查了一下,从中得到的答案是将它们作为字符串进行比较,这就是为什么函数是这样构造的

我做错了什么?我已经将
df2['DATE']
列预先格式化为具有相同
strftime()


我能想到的唯一直接的替代方法是从一个df到另一个df使用
df.lookup
,但我不知道怎么做。

对于if语句,要实现您期望的功能,您需要从
df2['DATE']
操作返回的序列中获取列表或numpy数组。您可以使用
.values
属性或将序列转换为列表
列表(df2['DATE'])

或者,
.str.contains()
方法可以比较所有字符串,然后
any()
将查找是否存在匹配项

any(df2['DATE'].str.contains('2014-01-02', regex=False)) # true

要使if语句达到预期效果,需要从
df2['DATE']
操作返回的序列中获取列表或numpy数组。您可以使用
.values
属性或将序列转换为列表
列表(df2['DATE'])

或者,
.str.contains()
方法可以比较所有字符串,然后
any()
将查找是否存在匹配项

any(df2['DATE'].str.contains('2014-01-02', regex=False)) # true

将系列转换为列表应该可以解决您的问题:

def isHoliday(t, holiday_list):
    f = t.strftime('%Y-%m-%d')
    if f in list(holiday_list):  # convert series to list
        return 1
    else:
        return 0

将系列转换为列表应该可以解决您的问题:

def isHoliday(t, holiday_list):
    f = t.strftime('%Y-%m-%d')
    if f in list(holiday_list):  # convert series to list
        return 1
    else:
        return 0

您可以共享数据帧的示例吗?请尝试:
df1['isHoliday']=df1['DATE'].isin(df2['DATE']).astype(int)
,记住将两个日期列设置为相同的格式。df1看起来像这样,df2看起来像这样。数据是西班牙语的,但同样的原则也适用。@QuangHoang我以前试过,连字符格式阻止直接整数解析。-->以10为基数的int()的文本无效:“2012-12-31”您应该以代码的形式发布数据样本,而不是以图片的形式发布。这有助于ppl帮助您更快:-)。您可以共享数据帧的示例吗?请尝试:
df1['isHoliday']=df1['DATE'].isin(df2['DATE'])。astype(int)
,记住将两个日期列设置为相同的格式。df1看起来像这样,df2看起来像这样。数据是西班牙语的,但同样的原则也适用。@QuangHoang我以前试过,连字符格式阻止直接整数解析。-->以10为基数的int()的文本无效:“2012-12-31”您应该以代码的形式发布数据样本,而不是以图片的形式发布。这有助于ppl帮助您更快:-)。谢谢!这很有魅力。两种方法都有,谢谢!这很有魅力。两种方法都有。谢谢,这非常有用,因为我意识到序列分析与列表分析没有相同的属性。谢谢,这非常有用,因为我意识到序列分析与列表分析没有相同的属性。