Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 大熊猫的滑动窗口_Python_Pandas_Datetime - Fatal编程技术网

Python 大熊猫的滑动窗口

Python 大熊猫的滑动窗口,python,pandas,datetime,Python,Pandas,Datetime,Pandas date_range功能允许我们以一定的频率制作滚动窗口 pd.日期\u范围(开始时间为2019-06-01',结束时间为2019-07-01',频率为3D') #输出 日期时间索引(['2019-06-01','2019-06-04','2019-06-07','2019-06-10',', '2019-06-13', '2019-06-16', '2019-06-19', '2019-06-22', '2019-06-25', '2019-06-28', '2019-07-01

Pandas date_range功能允许我们以一定的频率制作滚动窗口

pd.日期\u范围(开始时间为2019-06-01',结束时间为2019-07-01',频率为3D')
#输出
日期时间索引(['2019-06-01','2019-06-04','2019-06-07','2019-06-10',',
'2019-06-13', '2019-06-16', '2019-06-19', '2019-06-22',
'2019-06-25', '2019-06-28', '2019-07-01'],
dtype='datetime64[ns]',freq='3D')
但是我想创建一个3天的滑动窗口

[('2019-06-01', '2019-06-03'), ('2019-06-02', '2019-06-04'), ('2019-06-03', '2019-06-05'), ...]
我能和熊猫一起做吗?或者我应该写一个循环来获取日期吗?

循环解决方案:

#change range do default days
r = pd.date_range(start='2019-06-01', end='2019-07-01')

#create tuples in list comprehension
L = [(d.strftime('%Y-%m-%d'), (d + pd.Timedelta(2, 'd')).strftime('%Y-%m-%d')) for d in r]
print (L)
[('2019-06-01', '2019-06-03'), ('2019-06-02', '2019-06-04'), ('2019-06-03', '2019-06-05'), 
 ('2019-06-04', '2019-06-06'), ('2019-06-05', '2019-06-07'), ('2019-06-06', '2019-06-08'), 
 ('2019-06-07', '2019-06-09'), ('2019-06-08', '2019-06-10'), ('2019-06-09', '2019-06-11'), 
 ('2019-06-10', '2019-06-12'), ('2019-06-11', '2019-06-13'), ('2019-06-12', '2019-06-14'), 
 ('2019-06-13', '2019-06-15'), ('2019-06-14', '2019-06-16'), ('2019-06-15', '2019-06-17'), 
 ('2019-06-16', '2019-06-18'), ('2019-06-17', '2019-06-19'), ('2019-06-18', '2019-06-20'), 
 ('2019-06-19', '2019-06-21'), ('2019-06-20', '2019-06-22'), ('2019-06-21', '2019-06-23'), 
 ('2019-06-22', '2019-06-24'), ('2019-06-23', '2019-06-25'), ('2019-06-24', '2019-06-26'), 
 ('2019-06-25', '2019-06-27'), ('2019-06-26', '2019-06-28'), ('2019-06-27', '2019-06-29'), 
 ('2019-06-28', '2019-06-30'), ('2019-06-29', '2019-07-01'), ('2019-06-30', '2019-07-02'), 
 ('2019-07-01', '2019-07-03')]
r = pd.date_range(start='2019-06-01', end='2019-07-01').strftime('%Y-%m-%d').values

def rolling_window(a, window):
    shape = a.shape[:-1] + (a.shape[-1] - window + 1, window)
    strides = a.strides + (a.strides[-1],)
    return np.lib.stride_tricks.as_strided(a, shape=shape, strides=strides)
L1 = list(map(tuple, rolling_window(r, 3)[:, [0, -1]].tolist()))
解决方案:

#change range do default days
r = pd.date_range(start='2019-06-01', end='2019-07-01')

#create tuples in list comprehension
L = [(d.strftime('%Y-%m-%d'), (d + pd.Timedelta(2, 'd')).strftime('%Y-%m-%d')) for d in r]
print (L)
[('2019-06-01', '2019-06-03'), ('2019-06-02', '2019-06-04'), ('2019-06-03', '2019-06-05'), 
 ('2019-06-04', '2019-06-06'), ('2019-06-05', '2019-06-07'), ('2019-06-06', '2019-06-08'), 
 ('2019-06-07', '2019-06-09'), ('2019-06-08', '2019-06-10'), ('2019-06-09', '2019-06-11'), 
 ('2019-06-10', '2019-06-12'), ('2019-06-11', '2019-06-13'), ('2019-06-12', '2019-06-14'), 
 ('2019-06-13', '2019-06-15'), ('2019-06-14', '2019-06-16'), ('2019-06-15', '2019-06-17'), 
 ('2019-06-16', '2019-06-18'), ('2019-06-17', '2019-06-19'), ('2019-06-18', '2019-06-20'), 
 ('2019-06-19', '2019-06-21'), ('2019-06-20', '2019-06-22'), ('2019-06-21', '2019-06-23'), 
 ('2019-06-22', '2019-06-24'), ('2019-06-23', '2019-06-25'), ('2019-06-24', '2019-06-26'), 
 ('2019-06-25', '2019-06-27'), ('2019-06-26', '2019-06-28'), ('2019-06-27', '2019-06-29'), 
 ('2019-06-28', '2019-06-30'), ('2019-06-29', '2019-07-01'), ('2019-06-30', '2019-07-02'), 
 ('2019-07-01', '2019-07-03')]
r = pd.date_range(start='2019-06-01', end='2019-07-01').strftime('%Y-%m-%d').values

def rolling_window(a, window):
    shape = a.shape[:-1] + (a.shape[-1] - window + 1, window)
    strides = a.strides + (a.strides[-1],)
    return np.lib.stride_tricks.as_strided(a, shape=shape, strides=strides)
L1 = list(map(tuple, rolling_window(r, 3)[:, [0, -1]].tolist()))

datetimeindex
转换为系列
s
,并在
s
s.shift(-2)


你认为写一个循环会比用熊猫做更难吗?让我帮助
[(date,date+pd.Timedelta('2D')表示日期范围内的日期]