Python 我正在尝试为日期列表指定假日分类器
我有两个数据帧,一个带有日期及其对应假日的列表(df2),另一个带有事务列表(df1)。我尝试使用第一个函数在第二个函数上标记假日,但每当我尝试创建一个函数并应用它时,它只会为所有内容返回空值 我使用的函数如下所示: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:
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帮助您更快:-)。谢谢!这很有魅力。两种方法都有,谢谢!这很有魅力。两种方法都有。谢谢,这非常有用,因为我意识到序列分析与列表分析没有相同的属性。谢谢,这非常有用,因为我意识到序列分析与列表分析没有相同的属性。