【发布时间】:2019-03-18 11:12:15
【问题描述】:
我在尝试拼凑多个条件 if 时遇到问题。
-
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
我想我错过了一些真正的基本知识....任何帮助表示赞赏。
【问题讨论】:
-
我相信你可能有一个尾随
)在这一行:ifor_val = df.at[i,'bbls']/latest_date.day)- 你的 if 语句也是冗余分组的。 -
嗨,卡尔文。很高兴您自己解决了错误。如果可以,您应该将自己的答案标记为正确。此外,我还敦促您将您的代码显示为
code。这要清楚得多。许多人立即去寻找问题中的代码,只需通过格式即可。因此,请始终在适用的情况下使用代码格式。这次我为你做了修改。要掌握它,您可以尝试在您给出的答案中格式化您的代码。 -
谢谢。完毕。还在学习。
标签: python-3.x if-statement lambda