如何从pandas DataFrame日期列提取符合固定规则的标准气象周
你之前用到的%V格式化符和isocalendar().week都是ISO周规则,以周一为周起始,且要求每年第一周至少包含4个本年日期,和你固定按7天分段的标准气象周规则不匹配,因此结果不符合需求。
解决方案
你需要的标准气象周是按当年日期固定每7天划分的规则,不需要关联周几,直接通过当年日序计算即可,全矢量化操作适配你600多万行的大数据量,性能远高于自定义遍历或apply方案:
import pandas as pd # 先将日期列转为datetime类型(如果已经转换可跳过此步) lulc_gdf['issue_date'] = pd.to_datetime(lulc_gdf['issue_date']) # 计算每个日期是当年的第几天 day_of_year = lulc_gdf['issue_date'].dt.dayofyear # 按规则计算标准气象周 lulc_gdf['smw'] = (day_of_year - 1) // 7 + 1
规则匹配验证
计算逻辑完全符合你给出的周划分要求:
- 1月1日1月7日对应当年第17天:
(1-1)//7 +1 = 1,返回第1周 - 1月8日1月14日对应当年第814天:
(8-1)//7 +1 =2,返回第2周 - 平年12月31日为当年第365天:
(365-1)//7 +1 =53,返回第53周 - 闰年12月31日为当年第366天:
(366-1)//7 +1 =53,返回第53周
可选操作
如果需要输出两位字符串格式的周数(如01而非1),可追加以下代码:
lulc_gdf['smw'] = lulc_gdf['smw'].astype(str).str.zfill(2)
内容的提问来源于stack exchange,提问作者Abhilash Singh Chauhan
相关产品推荐
相关产品推荐

