如何解决创建一个从特定日期开始的日期计数器变量
我有一个变量,如:
start_dt = 201901
,基本上是2019年1月
我的初始数据帧为:
month
0
1
2
3
4
我想在数据框中添加一个新列(日期),其中对于第0个月,日期是start_dt
-1个月,对于随后的几个月,日期是月份+ 1增量。 >
我希望得到的数据框为:
month date
0 12/1/2018
1 1/1/2019
2 2/1/2019
3 3/1/2019
4 4/1/2019
解决方法
您可以减去1
并添加Timestamp.to_period
转换为月份的日期时间,然后输出to_timestamp
转换为时间戳的时间:
start_dt = 201801
start_dt = pd.to_datetime(start_dt,format='%Y%m')
s = df['month'].sub(1).add(start_dt.to_period('m')).dt.to_timestamp()
print (s)
0 2017-12-01
1 2018-01-01
2 2018-02-01
3 2018-03-01
4 2018-04-01
Name: month,dtype: datetime64[ns]
或者可以通过减去1
并添加日期时间将列转换为月份偏移量:
s = df['month'].apply(lambda x: pd.DateOffset(months=x-1)).add(start_dt)
print (s)
0 2017-12-01
1 2018-01-01
2 2018-02-01
3 2018-03-01
4 2018-04-01
Name: month,dtype: datetime64[ns]
,
您可以在这里使用第三方库dateutil
将日期时间增加一个月:
import pandas as pd
from datetime import datetime
from dateutil.relativedelta import relativedelta
start_dt = '201801'
number_of_rows = 10
start_dt = datetime.strptime(start_dt,'%Y%m')
df = pd.DataFrame({'date': [start_dt+relativedelta(months=+n)
for n in range(-1,number_of_rows-1)]})
print(df)
输出:
date
0 2017-12-01
1 2018-01-01
2 2018-02-01
3 2018-03-01
4 2018-04-01
5 2018-05-01
6 2018-06-01
7 2018-07-01
8 2018-08-01
9 2018-09-01
如您所见,在for
循环的每次迭代中,初始日期时间都会递增相应的迭代次数(从-1
开始)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。