[英]Apply, lambda function issues
I'm having issues with an if
statement and return the difference between two dates using a lambda
function with the apply
method.我在使用
if
语句时遇到问题,并使用带有apply
方法的lambda
函数返回两个日期之间的差异。 ['conus_days']
returns time/days in nanoseconds when the condition is true
. ['conus_days']
当条件为true
时返回时间/天数(以纳秒为单位)。 What's wrong with my code?我的代码有什么问题?
us_bd = CustomBusinessDay(calendar=USFederalHolidayCalendar())
def get_conusdays(row):
if row['Month']== row['conus_mth']:
return forecast['Start Date'] - forecast['start_month'].apply(us_bd)
else:
return 0
forecast ['conus_days']= forecast.apply(lambda row: get_conusdays(row), axis=1)
print(forecast)
Name EID Start Date End Date Country year Month \
0 XX 123456 2019-08-01 2020-01-03 AF 2020 1
1 XT. 3456789 2019-09-22 2020-02-16 Conus 2020 1
2 MH. 456789 2019-12-05 2020-03-12 Conus 2020 1
3 DR. 789456 2019-09-11 2020-03-04 IR 2020 1
4 JR. 985756 2020-01-03 2020-05-06 GE 2020 1
days_in_month start_month end_month working_days hours conus_mth \
0 31 2020-01-01 2020-01-31 21 372 8
1 31 2020-01-01 2020-01-31 21 168 9
2 31 2020-01-01 2020-01-31 21 168 12
3 31 2020-01-01 2020-01-31 21 372 9
4 31 2020-01-01 2020-01-31 21 310 1
cd conus_days
0 -154 days 0
1 -102 days 0
2 -28 days 0
3 -113 days 0
4 1 days [-13305600000000000 nanoseconds, -881280000000...
This is because the return of the get_conusdays
function is one series and one value(0).这是因为
get_conusdays
函数的返回是一个系列和一个值 (0)。 You need to unify your return output with a series or value.您需要使用系列或值来统一您的返回输出。
you can try like this:你可以这样尝试:
np.where
np.where
forecast ['conus_days'] = np.where(forecast['Month']==forecast["conus_mth"],
forecast['Start Date'] - forecast['start_month'].apply(us_bd),
0)
start_date = pd.to_datetime('2020-01-03')
end_date = pd.to_datetime('2020-01-20')
print(len(pd.DatetimeIndex(start=start_date,end=end_date, freq=us_bd)))
>>> 12 #skip US holidays as well as weekends
so,所以,
forecast ['conus_days'] = np.where(forecast['Month']==forecast["conus_mth"],
forecast.apply(lambda row : len(pd.DatetimeIndex(start=row['end_moth'],end=row['End Date'], freq=us_bd)), axis=1),
0)
same problem : Most recent previous business day in Python同样的问题: Python 中最近的前一个工作日
def get_conusdays(row):
if row['Month']== row['conus_mth']:
return row['Start Date'] - row['start_month'].apply(us_bd)
else:
return 0
forecast['conus_days']= forecast.apply(lambda row: get_conusdays(row), axis=1)
If you don't know the CustomBusinessDay
exactly and you don't need to apply it to the series, you should do it this way(each row).如果您不完全了解
CustomBusinessDay
并且不需要将其应用于系列,则应该以这种方式(每行)执行此操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.