尝试将多个条件的条件拼凑在一起时遇到问题。
UDF.daysinmonth(x)
返回一个月中的天数latest_date.month
返回日期时间对象的月份(例如3表示2019-3-10)-latest_date=df['offtake_date'].max()
df.insert(loc=20, column='bbls_mbd_mth',value=df['bbls'] / df['offtake_date'].apply(lambda x: UDF.daysinmonth(x) if x.month!=latest_date.month and x.year!=latest_date.year else latest_date.day))
这不起作用,if x.month!=latest_date.month and x.year!=latest_date.year
。对于2019年全年,它将返回数据中的最新日期,而不是过去几个月的天数。对于2018年,它工作正常。
这也不起作用。
df.insert(loc=20, column='bbls_mbd_mth',value=np.nan)
for i, row in df.iterrows():
ifor_val = df.at[i,'bbls']/latest_date.day
if ((df.at[i,'offtake_date'].month!=latest_date.month) and (df.at[i,'offtake_date'].year!=latest_date.year)):
ifor_val = df.at[i,'bbls']/(UDF.daysinmonth(df.at[i,'offtake_date']))
df.at[i,'bbls_mbd_mth'] = ifor_val
但是当我颠倒逻辑时它会起作用
for i, row in df.iterrows():
ifor_val = df.at[i,'bbls']/(UDF.daysinmonth(df.at[i,'offtake_date'])
if ((df.at[i,'offtake_date'].month==latest_date.month) and (df.at[i,'offtake_date'].year==latest_date.year)):
ifor_val = df.at[i,'bbls']/latest_date.day)
df.at[i,'bbls_mbd_mth'] = ifor_val
我认为我缺少真正的基本知识。...任何帮助表示赞赏。
答案 0 :(得分:0)
感谢Julian的及时答复。我发现了错误,这是逻辑错误。缺少的括号只是拼写错误。
apply(lambda x: UDF.daysinmonth(x) if x.month!=latest_date.month and x.year!=latest_date.year else latest_date.day))
我只想在日期属于最近的月份和年份时才应用last_day。通过上述操作,它与
相同apply(lambda x: UDF.daysinmonth(x) if x.year!=latest_date.year else latest_date.day))
无论哪个月,这都不是我想要的。我颠倒了逻辑,它起作用了
apply(lambda x: latest_date.day if x.month==latest_date.month and x.year==latest_date.year else UDF.daysinmonth(x)))