python - 我正在尝试将假期分类器分配给日期列表
问题描述
我有两个数据框,一个带有日期列表及其相应的假期(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.lookup
从一个 df 到另一个,但我不知道该怎么做。
解决方案
要使 if 语句执行您期望的操作,您需要从df2['DATE']
操作返回的 Series 中获取一个列表或一个 numpy 数组。您可以通过使用.values
属性或将系列转换为列表来做到这一点list(df2['DATE'])
:
import pandas as pd
df2 = pd.DataFrame(data=[['2014-01-02'], ['2014-01-03']], columns=['DATE'])
print('2014-01-02' in df2['DATE']) # false
print('2014-01-02' in df2['DATE'].values) # true
print('2014-01-02' in list(df2['DATE'])) # true
或者,该.str.contains()
方法可以比较所有字符串,然后any()
查找是否有匹配项。
any(df2['DATE'].str.contains('2014-01-02', regex=False)) # true
推荐阅读
- c# - SQL 如何替换一个值
- python - 使用 python 和请求,如何进行正确的 POST 调用以及在哪里找到标头?
- android - FirebaseAppDistribution:appDistributionUpload gradle 命令中缺少应用程序 ID
- mysql - 跨列和行计算值的实例
- javascript - 使用 redux 钩子时使用 redux 操作的最佳选择是什么?
- sql - Impala 2.11:AnalysisException:选择列表中不支持子查询
- swift - 在 SwiftUI 中获取当前的经纬度
- c++ - 是否可以禁止一个类被动态转换为?
- git - Git - 将发布分支合并到主分支
- tensorflow - 任何想法如何解决激活函数的问题?