Python 应用,lambda函数问题

Python 应用,lambda函数问题,python,pandas,lambda,apply,Python,Pandas,Lambda,Apply,我对if语句有问题,并使用lambda函数和apply方法返回两个日期之间的差异['conus_days']当条件为true时,返回以纳秒为单位的时间/天数。我的代码怎么了 us\u bd=CustomBusinessDay(calendar=USFederalHolidayCalendar()) def get_CONUSDay(世界其他地区): 如果行['Month']==行['conus_mth']: 返回预测['Start Date']-预测['Start_month'].应用(us_b

我对
if
语句有问题,并使用
lambda
函数和
apply
方法返回两个日期之间的差异
['conus_days']
当条件为
true
时,返回以纳秒为单位的时间/天数。我的代码怎么了

us\u bd=CustomBusinessDay(calendar=USFederalHolidayCalendar())
def get_CONUSDay(世界其他地区):
如果行['Month']==行['conus_mth']:
返回预测['Start Date']-预测['Start_month'].应用(us_bd)
其他:
返回0
预测['conus_days']=预测。应用(lambda行:get_conusdays(行),axis=1)
打印(预测)
名称EID开始日期结束日期国家/地区年份月份\
0 XX 123456 2019-08-01 2020-01-03 AF 2020 1
1 XT。3456789 2019-09-22 2020-02-16美国本土2020 1
2 MH。456789 2019-12-05 2020-03-12美国圆锥2020 1
3博士789456 2019-09-11 2020-03-04 IR 2020 1
4 JR.985756 2020-01-03 2020-05-06 GE 2020 1
月内开始月底月工作日小时数\
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   
康涅狄格州
0-154天0
1-102天0
2-28天0
3-113天0
4 1天[-1330560000000000纳秒,-881280000000。。。

这是因为
get\u conusdays
函数的返回是一个系列和一个值(0)。 您需要将返回输出与序列或值统一起来

您可以这样尝试:

1.
np.其中
forecast['conus_days']=np.where(forecast['Month']==forecast['conus_mth'],
预测[“开始日期”]-预测[“开始月份”]。适用(美国bd),
0)
补充。
start\u date=pd.to\u datetime('2020-01-03'))
结束日期=pd.至日期时间('2020-01-20')
打印(len(pd.DatetimeIndex(start=start\u date,end=end\u date,freq=us\u bd)))
>>>12#跳过我们的假日和周末
所以

forecast['conus_days']=np.where(forecast['Month']==forecast['conus_mth'],
forecast.apply(lambda行:len(pd.DatetimeIndex(开始=行['end\u moth'],结束=行['end Date'],频率=us\u bd)),轴=1),
0)
同样的问题:

2.应用(你的方法)
def get_conusdays(行):
如果行['Month']==行['conus_mth']:
返回行['Start Date']-行['Start\ U MOUNT']。应用(us\ U bd)
其他:
返回0
预测['conus_days']=预测。应用(lambda行:get_conusdays(行),axis=1)

如果您不确切知道
CustomBusinessDay
并且不需要将其应用于系列,您应该这样做(每行)。

我认为您可以直接将
get\u conusdays
传递到
apply
,如下所示:
forecast.apply(get\u conusdays,axis=1)
.yganalyst-在方法1中(np.where)您知道为什么custombusinessday在某些情况下不抵消周末的影响吗?例如,如果您以上面的示例将其替换为forecast['end_month]-forecast['end Date']。应用(us_bd),您将得到这两个时段之间的天数减去假期,但不是周末。我如何更正此问题?很抱歉,答案太晚了。我已更新了我的答案。我希望这有帮助,如果您需要更多帮助,请告诉我。