如何将数值型日期季度标识映射为对应年份1-4的整数季度值
实现方法
你不需要写繁琐的for循环,用向量化运算就可以简洁高效完成映射,以下是最常用的pandas数据集场景的实现代码:
import pandas as pd # 构造示例数据集 df = pd.DataFrame({ 'date': [0.25, 0.50, 0.75, 1.00, 1.25, 1.50, 1.75, 2.00, 2.25] }) # 一行代码计算季度列,全程无显式循环 df['quarter'] = (df['date'] * 4 % 4).replace(0, 4).astype(int)
运行后得到的输出和你预期完全匹配:
date quarter 0 0.25 1 1 0.50 2 2 0.75 3 3 1.00 4 4 1.25 1 5 1.50 2 6 1.75 3 7 2.00 4 8 2.25 1
逻辑说明
- 核心计算逻辑是纯数值运算,执行效率远高于逐行循环:
- 先把date列的值乘以4,原本的季度值会被转换为连续整数序列(0.254=1、0.54=2、1.04=4、1.254=5,以此类推)
- 对4取模后,整年份的数值(比如1.0、2.0乘4后得到4、8)会得到0,其余值对应1、2、3
- 最后把结果里的0替换为4,转成整数类型就是需要的1-4季度序号
如果你处理的是普通Python列表而非pandas结构,可以用列表推导式实现同样效果,写法也比逐行for循环简洁:
date_list = [0.25, 0.50, 0.75, 1.00, 1.25, 1.50, 1.75, 2.00, 2.25] quarter_list = [4 if val * 4 % 4 == 0 else int(val * 4 % 4) for val in date_list]
内容的提问来源于stack exchange,提问作者Daedomdan
相关产品推荐
相关产品推荐

