是否有一些像 .to_period 这样的 Python 函数可以帮助我根据日期提取会计年度的周数?



本质上,我想应用某种 lambda 函数(?(来应用于数据帧中包含日期的列。最初,我使用 dt.week 来提取周数,但日历日期与我使用的会计年度(2019 年 4 月 - 2020 年 3 月(不匹配。

我尝试使用熊猫的功能to_period('Q-MAR(,但这似乎有点不对劲。我一直在研究其他方法,但似乎没有任何工作正常。

2019年4月1日-> 第1周

2019年4月3日 -> 第一周

2019年4月30日->第5周

2019年5月1日->第5周

2019年5月15日->第6周

提前感谢您的任何建议或提示!

您可以

创建一个包含日期的DataFrame,频率为周:

date_rng = pd.date_range(start='01/04/2019',end='31/03/2020', freq='W')
df = pd.DataFrame(date_rng, columns=['date'])

然后,您可以查询日期小于或等于该值df哪个索引:

df.index[df.date <= query_date][-1]

这将输出小于或等于您要检查的日期的最大索引。我想你可以自己把它倒进一个 lambda 中吗?

注意

此解决方案有局限性,最大的局限性是您必须手动定义日期时间数据帧。

我确实创建了一个财政日历,以后可以即兴创作以在 Spark 中创建功能

from fiscalyear import *
beginDate = '2016-01-01'
endDate = '2021-12-31'
#create empty dataframe
df = spark.createDataFrame([()])
#create date from given date range 
df1 = df.withColumn("date",explode(expr(f"sequence(to_date('{beginDate}'), to_date('{endDate}'), interval 1 day)")))
# get week 
df1 = df1.withColumn('week',weekofyear(col("date"))).withColumn('year',year(col("date")))
#translate to use pandas in python
df1 = df1.toPandas()
#get fiscal year 
df1['financial_year'] = df1['date'].map(lambda x: x.year if x.month > 3 else x.year-1)
df1['date'] = pd.to_datetime(df1['date'])
#get calendar qtr
df1['quarter_old'] = df1['date'].dt.quarter
#get fiscal calendar
df1['quarter'] = np.where(df1['financial_year']< (df1['year']),df1['quarter_old']+3,df1['quarter_old'])
df1['quarter'] = np.where(df1['financial_year'] == (df1['year']),df1['quarter_old']-1,df1['quarter'])
#get fiscal week by shiftin gas per number of months different from usual calendar
df1["fiscal_week"] = df1.week.shift(91)
df1 = df1.loc[(df1['date'] >= '2020-01-01')]
df1.display()

最新更新