2017-12-30 4 views
1

롤링 윈도우에서 가장 최근 값을 가져 와서 해당 윈도우의 모든 숫자의 평균으로 나눠보기를 원합니다.Python Pandas : 사용자 정의 롤링 윈도우 계산

내가 뭘하려 :

df.a.rolling(window=7).mean()/df.a[-1] 

df.a[-1]는 항상 전체 데이터 세트의 최신이기 때문에이 작동하지 않습니다. 창 마지막 값이 필요합니다.

저는 오늘 많은 검색을했습니다. 나는 잘못된 용어를 검색하거나 결과를 이해하지 못할 수도 있습니다. 왜냐하면 나는 아무 것도 유용하지 않기 때문입니다.

모든 포인터가 감사하겠습니다.

답변

2

롤링 윈도우에서 집계 (mean() 사용)는 원본 열과 동일한 색인을 사용하여 pandas Series 객체를 반환합니다. 단순히 롤링 윈도우를 집계 한 다음 원래 열을 집계 된 값으로 나눌 수 있습니다.

import numpy as np 
import pandas as pd 

df = pd.DataFrame(np.arange(30), columns=['A']) 

df 
# returns: 
    A 
0 0 
1 1 
2 2 
... 
27 27 
28 28 
29 29 

동일한 인덱스의 시리즈를 얻으려면 롤링 평균을 사용할 수 있습니다.

df.A.rolling(window=7).mean() 
# returns: 
0  NaN 
1  NaN 
2  NaN 
3  NaN 
4  NaN 
5  NaN 
6  3.0 
7  4.0 
... 
26 23.0 
27 24.0 
28 25.0 
29 26.0 

가 색인되어 있기 때문에, 당신이 원하는 결과를 df.A하여 간단한 격차를 얻을 수 있습니다.

df.A.rolling(window=7).mean()/df.A 
# returns: 
0   NaN 
1   NaN 
2   NaN 
3   NaN 
4   NaN 
5   NaN 
6  0.500000 
7  0.571429 
8  0.625000 
9  0.666667 
10 0.700000 
11 0.727273 
12 0.750000 
13 0.769231 
14 0.785714 
15 0.800000 
16 0.812500 
17 0.823529 
18 0.833333 
19 0.842105 
20 0.850000 
21 0.857143 
22 0.863636 
23 0.869565 
24 0.875000 
25 0.880000 
26 0.884615 
27 0.888889 
28 0.892857 
29 0.896552 
+0

자세한 설명을 읽어 주셔서 감사합니다. 이 방법이 효과가있을뿐만 아니라 판다를 올바르게 사용하는 방법을 더 잘 이해할 수 있습니다. 그것은 지금 총체적인 의미를가집니다. 이와 같은 문제를 다르게 처리하는 다른 언어에서 왔기 때문에 이전에 이해할 수 없었습니다. – Tony

관련 문제