Python 我如何循环几个月,一次跳过三个?
我有以下数组:Python 我如何循环几个月,一次跳过三个?,python,date,Python,Date,我有以下数组: dates array(['2015-07-01T00:00:00.000000000', '2015-08-01T00:00:00.000000000', '2015-09-01T00:00:00.000000000', '2015-10-01T00:00:00.000000000', '2015-11-01T00:00:00.000000000', '2015-12-01T00:00:00.000000000', '2016-01-0
dates
array(['2015-07-01T00:00:00.000000000', '2015-08-01T00:00:00.000000000',
'2015-09-01T00:00:00.000000000', '2015-10-01T00:00:00.000000000',
'2015-11-01T00:00:00.000000000', '2015-12-01T00:00:00.000000000',
'2016-01-01T00:00:00.000000000', '2016-02-01T00:00:00.000000000',
'2016-03-01T00:00:00.000000000', '2016-04-01T00:00:00.000000000',
'2016-05-01T00:00:00.000000000', '2016-06-01T00:00:00.000000000',
'2016-07-01T00:00:00.000000000', '2016-08-01T00:00:00.000000000',
'2016-09-01T00:00:00.000000000', '2016-10-01T00:00:00.000000000',
'2016-11-01T00:00:00.000000000', '2016-12-01T00:00:00.000000000',
'2017-01-01T00:00:00.000000000', '2017-02-01T00:00:00.000000000',
'2017-03-01T00:00:00.000000000', '2017-04-01T00:00:00.000000000',
'2017-05-01T00:00:00.000000000', '2017-06-01T00:00:00.000000000',
'2017-07-01T00:00:00.000000000', '2017-08-01T00:00:00.000000000',
'2017-09-01T00:00:00.000000000', '2017-10-01T00:00:00.000000000',
'2017-11-01T00:00:00.000000000', '2017-12-01T00:00:00.000000000'],
dtype='datetime64[ns]')
我希望每3个月创建一个循环,第一次迭代采用日期[0]
和日期[3]
,第二次迭代采用日期[3]
和日期[6]
等等
这就是我正在做的
c1 = 0
c2 = 3
for i,j in enumerate(dates[:-3]):
v1 = dates[c1]
v2 = dates[c2]
c1 = c1 + 3
c2 = c2 + 3
还有更优雅的方式吗?对于zip中的日期1、日期2(日期[:-3:3],日期[3:3]):
#做事
您可以使用来适当地重塑形状:
>>> from numpy.lib.stride_tricks import as_strided
>>> as_strided(x, shape=((x.shape[0])//3 - 1, 2), strides=(x.itemsize*3,)*2)
array([['2015-07-01T00:00:00.000000000', '2015-10-01T00:00:00.000000000'],
['2015-10-01T00:00:00.000000000', '2016-01-01T00:00:00.000000000'],
['2016-01-01T00:00:00.000000000', '2016-04-01T00:00:00.000000000'],
['2016-04-01T00:00:00.000000000', '2016-07-01T00:00:00.000000000'],
['2016-07-01T00:00:00.000000000', '2016-10-01T00:00:00.000000000'],
['2016-10-01T00:00:00.000000000', '2017-01-01T00:00:00.000000000'],
['2017-01-01T00:00:00.000000000', '2017-04-01T00:00:00.000000000'],
['2017-04-01T00:00:00.000000000', '2017-07-01T00:00:00.000000000'],
['2017-07-01T00:00:00.000000000', '2017-10-01T00:00:00.000000000']],
dtype='datetime64[ns]')
您可以直接使用下标跨越日期数组:
for v1,v2 in zip(dates[::3],dates[3::3]):
print(v1,v2)
2015-07-01T00:00:00.000000000 2015-10-01T00:00:00.000000000
2015-10-01T00:00:00.000000000 2016-01-01T00:00:00.000000000
2016-01-01T00:00:00.000000000 2016-04-01T00:00:00.000000000
2016-04-01T00:00:00.000000000 2016-07-01T00:00:00.000000000
2016-07-01T00:00:00.000000000 2016-10-01T00:00:00.000000000
2016-10-01T00:00:00.000000000 2017-01-01T00:00:00.000000000
2017-01-01T00:00:00.000000000 2017-04-01T00:00:00.000000000
2017-04-01T00:00:00.000000000 2017-07-01T00:00:00.000000000
2017-07-01T00:00:00.000000000 2017-10-01T00:00:00.000000000