2016-09-07 22 views
6

Bạn có thể truy cập vào đối tượng cửa sổ con lăn lăn hay không.Gấu trúc: Bạn có thể truy cập các mục cửa sổ đang lăn

rs = pd.Series(range(10)) 
rs.rolling(window = 3) 

#print's 
Rolling [window=3,center=False,axis=0] 

Tôi có thể có được như nhóm ?:

[0,1,2] 
[1,2,3] 
[2,3,4] 
+0

xem: http://stackoverflow.com/a/38510101/2336654 – piRSquared

+0

Tôi cho rằng những gì bạn muốn là trực quan. Nó vẫn chưa được phát triển. – piRSquared

+0

Mọi cập nhật kể từ năm ngoái? (vẫn chưa phát triển?) – Ziofil

Trả lời

2

Dưới đây là một cách giải quyết, nhưng chờ đợi để xem nếu có ai có giải pháp gấu trúc:

def rolling_window(a, step): 
    shape = a.shape[:-1] + (a.shape[-1] - step + 1, step) 
    strides = a.strides + (a.strides[-1],) 
    return np.lib.stride_tricks.as_strided(a, shape=shape, strides=strides) 

rolling_window(rs, 3) 

array([[ 0, 1, 2], 
     [ 1, 2, 3], 
     [ 2, 3, 4], 
     [ 3, 4, 5], 
     [ 4, 5, 6], 
     [ 5, 6, 7], 
     [ 6, 7, 8], 
     [ 7, 8, 9], 
     [ 8, 9, 10]]) 
3

tôi sẽ bắt đầu tắt này bằng cách nói này đang tiếp cận với impl nội bộ. Nhưng nếu bạn thực sự thực sự muốn tính toán những người lập chỉ mục giống như những con gấu trúc.

Bạn sẽ cần v0.19.0rc1 (chỉ là về phát hành), bạn có thể conda install -c pandas pandas=0.19.0rc1

In [41]: rs = pd.Series(range(10)) 

In [42]: rs 
Out[42]: 
0 0 
1 1 
2 2 
3 3 
4 4 
5 5 
6 6 
7 7 
8 8 
9 9 
dtype: int64 

# this reaches into an internal implementation 
# the first 3 is the window, then second the minimum periods we 
# need  
In [43]: start, end, _, _, _, _ = pandas._window.get_window_indexer(rs.values,3,3,None,use_mock=False) 

# starting index 
In [44]: start 
Out[44]: array([0, 0, 0, 1, 2, 3, 4, 5, 6, 7]) 

# ending index 
In [45]: end 
Out[45]: array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) 

# windo size 
In [3]: end-start 
Out[3]: array([1, 2, 3, 3, 3, 3, 3, 3, 3, 3]) 

# the indexers 
In [47]: [np.arange(s, e) for s, e in zip(start, end)] 
Out[47]: 
[array([0]), 
array([0, 1]), 
array([0, 1, 2]), 
array([1, 2, 3]), 
array([2, 3, 4]), 
array([3, 4, 5]), 
array([4, 5, 6]), 
array([5, 6, 7]), 
array([6, 7, 8]), 
array([7, 8, 9])] 

Vì vậy, đây là loại tầm thường trong trường hợp cửa sổ cố định, điều này trở nên vô cùng hữu ích trong một kịch bản cửa sổ biến, ví dụ trong 0.19.0 bạn có thể chỉ định những thứ như 2S ví dụ để tổng hợp theo thời gian.

Tất cả điều đó đã nói, việc nhận các chỉ mục này không đặc biệt hữu ích. bạn thường muốn làm điều gì đó có kết quả. Đó là điểm của hàm tổng hợp hoặc .apply nếu bạn muốn tổng hợp chung.

Các vấn đề liên quan