我有一个我曾经遇到过的函数:
def sub_kpi1_rule(sub_comp_appr_date, date_report_run, greater_of_date_sub_sub_ll):
if pd.isnull(sub_comp_appr_date) and not alive_for_six_days(date_report_run, greater_of_date_sub_sub_ll):
return "NA"
elif (sub_comp_appr_date - greater_of_date_sub_sub_ll).ceil("1d").days <= 6:
return "PASS"
else:
return "FAIL"
所有的参数都是日期类型,所以我假设:
(sub_comp_appr_date - greater_of_date_sub_sub_ll)
...返回一个timedelta示例。我对此ceil(语法)感到困惑
elif (sub_comp_appr_date - greater_of_date_sub_sub_ll).ceil("1d").days <= 6:
因为如果我尝试减去两个日期并使用这个函数,我会得到一个错误:
from datetime import date
a = date(2022, 10,1)
b = date(2022, 10,15)
(b-a).ceil("1d")
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
Cell In [36], line 4
2 a = date(2022, 10,1)
3 b = date(2022, 10,15)
----> 4 (b-a).ceil("1d")
AttributeError: 'datetime.timedelta' object has no attribute 'ceil'
在 Dataframe 上调用该函数:
df["Sub KPI1"] = df.apply(lambda x: sub_kpi1_rule(x["SUBM_LATE_DESTINATION_COMPLIANCE_APPROVAL_DATE"], date_report_run, x["Greater of Date Submitted and Submission LL Created"]), axis=1)
我认为类型是pd.timestamp,因为date_report_run被显式转换为一个:
date_report_run = date(year_report_run, month_report_run, day_report_run)
date_report_run = pd.Timestamp(date_report_run)
我猜我得到的是一个Pandas。_libs。tslibs。timedelta。Timedelta,而不是一个正常的timedelta。
1条答案
按热度按时间mznpcxlj1#
你会得到一个错误,因为你在你的例子中对datetime.timedelta类使用了
.ceil()
。为此你需要pandas类。(pandas._libs.tslibs.timedeltas. Timedelta)delta = pd.Timedelta(4, "d")
现在,
.ceil("1d")
有什么作用?如果你有一个小时和分钟的增量,你想ceil它到天的值。例如:时间增量(“4天15:38:03”)
时间增量('5天00:00:00')
当小时数超过12h时,日期增量上限为5天。