如何在python中对日历年数据进行自定义时间(半个月和10天)分割



我在df中有一系列从1930年1月1日开始到2020年5月7日结束的日子。我想要以不同方式划分年份的列:到目前为止,我有表示年份、月份和周的列。我还想要表示DekadSemi-Month增量的列。

Dekad是10天的时间段,其中1月1-10日是"Dekad";1〃;,1月11日至20日;2〃;,等等以及最后的dekad";37〃;将具有小于10的长度,这是因为365不被10均匀地分割。

对于semi-month,我想将每个月减半,然后逐年递增。这有点棘手,因为月份有不同的长度,但基本上1月1日至15日将是"月";1〃;1月16日至31日将是";2〃;2月1日至14日将是";3〃;2月15日至28日将是";4〃;,等(在非闰年(

换句话说,我想要日历年的自定义日期时间分割或自定义期间。对于dekad来说,这应该相对容易做到,所以这是我的首要任务,而不是半个月的拆分。

datetime包中是否有已经可以做到这一点的东西,或者我是否需要编写自定义函数?

如果是后者,Dekad的起点可能是取first_day_of_year对象,然后将datetime.timedelta(days=10)相加,并为每个dekad从1递增到37?欢迎提出建议。

# import packages 
import pandas as pd
import datetime
from dateutil.relativedelta import *
# create dataframe with dates
df = pd.DataFrame()
df['Datetime'] = pd.date_range(start='1/1/1930', periods=33000, freq='D')
# extract the Year, Month, etc. from the Datetime 
df['Year'] = [dt.year for dt in df['Datetime']]
df['Month'] = [dt.month for dt in df['Datetime']]
df['Week'] = [dt.week for dt in df['Datetime']]

这就是我最终想要的:

Datetime    Year    Month   Week  Semi_Month  Dekad
0   1930-01-01  1930    1       1     1           1
1   1930-01-02  1930    1       1     1           1
2   1930-01-03  1930    1       1     1           1
3   1930-01-04  1930    1       1     1           1
4   1930-01-05  1930    1       1     1           1
... ... ... ... ...
32995   2020-05-03  2020    5   18    9           13
32996   2020-05-04  2020    5   19    9           13
32997   2020-05-05  2020    5   19    9           13
32998   2020-05-06  2020    5   19    9           13
32999   2020-05-07  2020    5   19    9           13

对于Dekad,它实际上是dayofyear整数除以10加1。对于Semi_month,其思想是检查该月的day比用MonthEnd除以2得到的该月的最后一天大(gt(的地方,将月数乘以2减1。

df['Semi_Month'] = (df['Datetime'].dt.day
.gt((df['Datetime']+pd.tseries.offsets.MonthEnd()).dt.day//2) 
+ df['Month']*2 -1)
df['Dekad'] = df['Datetime'].dt.dayofyear//10+1
print(df)
Datetime  Year  Month  Week  Semi_Month  Dekad
0     1930-01-01  1930      1     1           1      1
1     1930-01-02  1930      1     1           1      1
2     1930-01-03  1930      1     1           1      1
3     1930-01-04  1930      1     1           1      1
4     1930-01-05  1930      1     1           1      1
...          ...   ...    ...   ...         ...    ...
32995 2020-05-03  2020      5    18           9     13
32996 2020-05-04  2020      5    19           9     13
32997 2020-05-05  2020      5    19           9     13
32998 2020-05-06  2020      5    19           9     13
32999 2020-05-07  2020      5    19           9     13

最新更新