是否有函数判断日期属于哪一季度?

158 投票
18 回答
197830 浏览
提问于 2025-04-15 14:13

当然我可以自己写这个,但在我重新发明轮子之前,有没有已经存在的函数可以做到这一点?

18 个回答

46

我想推荐一个可能更简洁的解决方案。如果 X 是一个 datetime.datetime.now() 的实例,那么季度可以这样计算:

import math
Q=math.ceil(X.month/3.)

需要从数学模块中导入 ceil,因为它不能直接使用。

80

如果你已经在使用 pandas 这个库,那就很简单了。

import datetime as dt
import pandas as pd

quarter = pd.Timestamp(dt.date(2016, 2, 29)).quarter
assert quarter == 1

如果你的数据表里有一个 date(日期)列,你可以很轻松地创建一个新的 quarter(季度)列:

df['quarter'] = df['date'].dt.quarter
233

给定一个 x 的实例,它是 datetime.date 类型,使用 (x.month-1)//3 可以得到季度的数字(第一季度是0,第二季度是1,依此类推。如果你想从1开始计算,就加1)。


最开始有两个答案得到了很多赞同,甚至还被接受过(现在都被删除了),但它们有问题——没有在除法前减去 -1,而且用4来除而不是3。因为 .month 的值是从1到12的,所以你可以自己检查哪个公式是对的:

for m in range(1, 13):
  print m//4 + 1,
print

这个公式的结果是 1 1 1 2 2 2 2 3 3 3 3 4——显示了两个四个月的季度和一个单个月的季度(哎呀)。

for m in range(1, 13):
  print (m-1)//3 + 1,
print

而这个公式的结果是 1 1 1 2 2 2 3 3 3 4 4 4——你不觉得这个结果更好看吗?-)

这证明了这个问题是有必要讨论的,我觉得;-).

我认为 datetime 模块不一定要包含所有可能有用的日历功能,但我知道我自己维护了一个(经过充分测试的;-) datetools 模块,用于我和其他人在工作中的项目,它有很多小功能来执行这些日历计算——有些复杂,有些简单,但没有理由重复做这些工作(即使是简单的工作)或在这些计算中冒险出错;-).

撰写回答