如何从给定日期中提取对应年份的季度标识
2020年日度数据季度标识提取实现方案
以下是不同工具场景下的可直接复用实现方案:
Excel/WPS 实现方案
- 提前确认日期列为标准日期格式,而非文本格式
- 两种可选公式,直接替换公式内的
A2为实际日期单元格位置,下拉填充即可:- 严格贴合给定规则的区间判断写法:
=IF(AND(A2>=DATE(2020,1,1),A2<=DATE(2020,3,31)),"2020-Q1",IF(AND(A2>=DATE(2020,4,1),A2<=DATE(2020,6,30)),"2020-Q2",IF(AND(A2>=DATE(2020,7,1),A2<=DATE(2020,9,30)),"2020-Q3",IF(AND(A2>=DATE(2020,10,1),A2<=DATE(2020,12,31)),"2020-Q4","超出2020年范围")))) - 简化计算写法:
=IF(YEAR(A2)=2020,"2020-Q"&CEILING(MONTH(A2)/3,1),"超出2020年范围")
- 严格贴合给定规则的区间判断写法:
Python 实现方案
依赖pandas处理结构化数据,两种写法输出结果完全一致:
import pandas as pd # 先把日期列转为标准datetime格式,df为你的数据集,date_col替换为实际日期列名 df['date_col'] = pd.to_datetime(df['date_col']) # 写法1:严格按给定区间判断 def get_2020_quarter(date): if pd.Timestamp('2020-01-01') <= date <= pd.Timestamp('2020-03-31'): return '2020-Q1' elif pd.Timestamp('2020-04-01') <= date <= pd.Timestamp('2020-06-30'): return '2020-Q2' elif pd.Timestamp('2020-07-01') <= date <= pd.Timestamp('2020-09-30'): return '2020-Q3' elif pd.Timestamp('2020-10-01') <= date <= pd.Timestamp('2020-12-31'): return '2020-Q4' else: return '非2020年日期' df['quarter_tag'] = df['date_col'].apply(get_2020_quarter) # 写法2:大数据量更高效的内置方法写法 df['quarter_tag'] = df['date_col'].dt.to_period('Q').astype(str).where(df['date_col'].dt.year == 2020, '非2020年日期')
SQL 实现方案
MySQL 写法
-- daily_data为表名,dt为日期字段名,可按需替换 SELECT dt, CASE WHEN dt BETWEEN '2020-01-01' AND '2020-03-31' THEN '2020-Q1' WHEN dt BETWEEN '2020-04-01' AND '2020-06-30' THEN '2020-Q2' WHEN dt BETWEEN '2020-07-01' AND '2020-09-30' THEN '2020-Q3' WHEN dt BETWEEN '2020-10-01' AND '2020-12-31' THEN '2020-Q4' ELSE '超出2020年范围' END AS quarter_tag FROM daily_data;
Hive/Spark SQL 简化写法
SELECT dt, IF(year(dt)=2020, concat('2020-Q', quarter(dt)), '超出2020年范围') AS quarter_tag FROM daily_data;
内容的提问来源于stack exchange,提问作者Shardool Mungde
相关产品推荐
相关产品推荐

