У меня проблема при попытке собрать несколько условных выражений, если.
UDF.daysinmonth(x)
возвращает количество дней в месяце latest_date.month
возвращает месяц объекта datetime(например, 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
Я думаю, что яупущено что-то реальное основное .... любая помощь приветствуется.