如何解决我如何抵消熊猫的年度日期,所以开始日期是10月1日而不是1月1日?
我有以下数据框:
我如何抵消每年的熊猫日,所以开始日期是10月1日,而不是1月1日。
在这种情况下,我希望年份为10月1日至9月30日,并且需要考虑leap年。
下面是我想要输出的示例,“年中的日期”列是唯一变量。
这是表格形式的数据框:
Day stock dayofyear weekday month year leapyear
0 24/09/2019 10 267 1 9 2019 False
1 25/09/2019 10 268 2 9 2019 False
2 26/09/2019 11 269 3 9 2019 False
3 27/09/2019 12 270 4 9 2019 False
4 28/09/2019 14 271 5 9 2019 False
5 29/09/2019 14 272 6 9 2019 False
6 30/09/2019 15 273 0 9 2019 False
7 01/10/2019 16 274 1 10 2019 False
8 02/10/2019 17 275 2 10 2019 False
9 03/10/2019 18 276 3 10 2019 False
10 04/10/2019 19 277 4 10 2019 False
解决方法
使用:
df['Day'] = pd.to_datetime(df['Day'],dayfirst=True)
base_year = np.where(df['month'].ge(10),df['year'],df['year'].sub(1))
base_date = pd.to_datetime(base_year,format='%Y') + pd.DateOffset(months=9)
df['dayofyear'] = (df['Day'] - base_date).dt.days.add(1)
详细信息:
使用pd.to_datetime
将Day
列转换为熊猫日期时间序列,然后将np.where
与Series.gt
和Series.sub
一起使用以计算base_year
Day
列中的每个日期。
print(base_year)
array([2018,2018,2019,2019])
使用pd.to_datetime
将base_year
转换为熊猫日期时间序列,并添加偏移量9 months
,以便base_date
从1 October
开始。
print(base_date)
DatetimeIndex(['2018-10-01','2018-10-01','2019-10-01','2019-10-01'],dtype='datetime64[ns]',freq=None)
从此Day
中减去base_date
列,然后使用Series.dt.days
计算dayofyear
:
print(df)
Day stock dayofyear weekday month year leapyear
0 2019-09-24 10 359 1 9 2019 False
1 2019-09-25 10 360 2 9 2019 False
2 2019-09-26 11 361 3 9 2019 False
3 2019-09-27 12 362 4 9 2019 False
4 2019-09-28 14 363 5 9 2019 False
5 2019-09-29 14 364 6 9 2019 False
6 2019-09-30 15 365 0 9 2019 False
7 2019-10-01 16 1 1 10 2019 False
8 2019-10-02 17 2 2 10 2019 False
9 2019-10-03 18 3 3 10 2019 False
10 2019-10-04 19 4 4 10 2019 False
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。