Python 大熊猫的滑动窗口
Pandas date_range功能允许我们以一定的频率制作滚动窗口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
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')表示日期范围内的日期]