我想知道一种简单的方法,以以下格式('YYYY-SX')显示一天中的哪个学期; 2018-01-01->(2018S1)。
我有一个日期范围,很容易在四分之一时间内完成:
import pandas as pd
import datetime
start = datetime.datetime(2018, 1, 1)
end = datetime.datetime(2020, 1, 1)
all_days = pd.date_range(start, end, freq='D')
all_quarters = []
for day in all_days:
all_quarters.append(str(pd.Period(day, freq='Q')))
但是给定文档,每学期没有班次:
https://pandas.pydata.org/pandas-docs/version/0.23.4/generated/pandas.Period.html
https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html#offset-aliases
我不想一定使用任何特定的模块。
关于如何干净地做任何想法?
您可以做这样的事情。
df['sem']= df.date.dt.year.astype(str) + 'S'+ np.where(df.date.dt.quarter.gt(2),2,1).astype(str)
注意:date
列必须作为datetime
对象
输入
date
0 2019-09-30
1 2019-10-31
2 2019-11-30
3 2019-12-31
4 2020-01-31
5 2020-02-29
6 2020-03-31
7 2020-04-30
8 2020-05-31
9 2020-06-30
输出
date sem
0 2019-09-30 2019S2
1 2019-10-31 2019S2
2 2019-11-30 2019S2
3 2019-12-31 2019S2
4 2020-01-31 2020S1
5 2020-02-29 2020S1
6 2020-03-31 2020S1
7 2020-04-30 2020S1
8 2020-05-31 2020S1
9 2020-06-30 2020S1