我有从1930年1月1日开始到2020年5月7日结束的几天。我想要以不同方式划分年份的列:到目前为止,我有表示年份、月份和星期的列。我还需要表示Dekad
和Semi-Month
增量的列
Dekad为10天,其中1月1日至10日为Dekad“1”,1月11日至20日为Dekad“2”,以此类推,最终Dekad“37”的长度将小于10,因为365不会被10平均分割
对于semi-month
,我想把每个月分成一年中的一半和增量。这有点棘手,因为月份有不同的长度,但基本上1月1日至15日为“1”,1月16日至31日为“2”,2月1日至14日为“3”,2月15日至28日为“4”,等等(在非闰年)
换句话说,我需要自定义日期时间分割或日历年的自定义时段。这对于dekads来说应该是相对容易的,所以这比半个月的分割更重要
在datetime
包中是否有已经可以执行此操作的东西,或者我是否需要编写自定义函数
如果是后者,那么Dekad
的起点可能是取一年中的第一天对象,然后加上datetime.timedelta(days=10)
并从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,它实际上是^{} 整数除以10加1。对于半个月,检查该月的} 除以2得到的该月最后一天大(
day
比用^{gt
)的地方,将月数乘以2减1相关问题 更多 >
编程相关推荐