python新手。
我有一个数据集,其中包含一个日期列,格式为yyyy-mm-dd(%Y%m%d(,为datetime64类型。数据集跨度为2019-2020年2年。我正在尝试编写一个函数,根据日期添加季度。我无法获得if语句来识别数据,所以所有内容都返回到"2020年第4季度",我不明白为什么。
def applyquarter(x):
if 'date' < '2019-04-01':
return('Q12019')
elif 'date' < '2019-07-01':
return('Q22019')
elif 'date' < '2019-10-01':
return('Q32019')
elif 'date' < '2020-01-01':
return('Q42019')
elif 'date' < '2020-04-01':
return('Q12020')
elif 'date' < '2020-07-01':
return('Q22020')
elif 'date' < '2020-10-01':
return('Q32020')
else:
return('Q42020')
我的理解:
如果/elif/else语句一直运行到满足条件,则停止运行
datetime64可以与布尔运算符一起使用
问题一定存在于与日期时间值的布尔交互中
有人能解释一下我理解不正确的地方吗?
if 'date' < '2019-04-01':
这将比较两个字符串。发布的代码中没有任何内容使对数据帧有任何引用。
请参阅此处将日期转换为季度。关键呼叫是
pd.PeriodIndex(df.date, freq='Q')
我有一个解决方案
date2check=date.today()
dd=((date2check - pd.offsets.QuarterBegin(startingMonth=4))).date()
if dd.month//3 !=0:
qtrnum =dd.month//3
yy=dd.year
else:
qtrnum =4
yy=dd.year - 1
qname = "Q"+str(qtrnum)+str(yy)
qname
输出:
'Q42020'