【发布时间】:2019-04-25 20:27:37
【问题描述】:
我有两个数据框,一个带有日期列表及其对应的假期 (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。我查找了date to date comparison,得到的答案是将它们作为字符串进行比较,因此为什么函数是以这种方式构造的。
我做错了什么?我已经将df2['DATE'] 列预格式化为具有相同strftime() 的字符串
我能想到的唯一直接替代方法是从一个 df 到另一个使用 df.lookup,但我不知道该怎么做。
【问题讨论】:
-
你能分享数据帧的样本吗?
-
试试:
df1['isHoliday'] = df1['DATE'].isin(df2['DATE']).astype(int),记得把两个日期列设置成相同的格式 -
当然。 df1 看起来像这样 pasteboard.co/IbOSmwX.png 和 df2 像这样 pasteboard.co/IbOSZMe.png 数据是西班牙语,但同样的原则适用。
-
@QuangHoang 我之前尝试过,连字符格式会阻止直接 int 解析。 --> int() 以 10 为底的无效文字:'2012-12-31'
-
您应该以代码而不是图片的形式发布您的数据样本。这有助于人们更快地帮助您:-)。
标签: python pandas datetime data-manipulation