如何解决np.where,带有熊猫列的np.busday_count
在将以下逻辑链捆绑在一起时,我遇到了一些麻烦:
np.where(df['date3'].isnull(),np.busday_count(df['date2'],df['date1'],holidays=my_holidays),np.busday_count(df['date3'],holidays=my_holidays))
这是一个示例:
date1 date2 date3
2019-01-31 2019-02-01 None
2019-01-31 2019-02-01 None
2019-02-28 2018-10-03 2019-02-28
2019-02-28 2018-10-03 2019-02-28
2019-02-28 2018-10-03 2019-02-28
简要背景-date3列具有一些空值。我试过转换为日期时间,然后在每个日期列之后使用.dt.date运行此功能。我已经在上面的方式中尝试过日期为“ 2019-01-31”类型的日期。两者都给我ValueError: Cannot compute a business day count with a NaT (not-a-time) date when trying from the string versions of the dates
,ValueError: cannot convert float NaN to integer when trying after converting to datetime
。
从在线阅读开始,看来问题是由于one date列中的空值所引起的,无论我是作为字符串保留且null为None,还是当我转换为null变为{{1}的datetime时},与NaT
函数结合使用的大熊猫语法糖。
是否有更简单的方法来完成此操作?理想情况下,由于要遍历整个数据帧需要时间,因此我会尽量避免for循环。
我能够通过蛮力完成此任务,但我想知道如何在不遍历整个数据帧的情况下实现此目标。
解决方法
当我想使用busday_count()函数时,即使我使用when()函数,我也面临着同样的问题,但是它似乎仍然适用于整列,并且由于Nat值而失败。 对我而言,有效的方法是在where()函数之前将Nat值替换为0。
df['date3']= df['date3'].fillna(0)
然后在where()
之类的条件下使用== 0 or >= 0
函数,它对我有用。
,然后将该列从0
改回到Nat
。
这不是一个干净的解决方案,但它是什么。
希望如此。
此问题是where()
函数中的多个条件“&”不起作用,但看来情况并非如此。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。