2017-12-19 5 views
3

pandas.rolling_corr이 실제로 어떻게 롤링 상관 관계를 계산하는지 이해하려고합니다. 지금까지 나는 항상 멍청한 행동을 해왔다. 나는 속도와 사용 편의성 때문에 팬더를 사용하는 것을 선호하지만 이전처럼 롤링 상관 관계를 얻을 수는 없습니다.팬더에서 롤링 상관 관계 이해하기

나는 두 numy 배열로 시작 :

c = np.array([1,2,3,4,5,6,7,8,9,8,7,6,5,4,3,2,1]) 
d = np.array([8,9,8]) 

가 지금은 상호 상관을 계산하고자하는 길이 3 창 내 배열 C의. 나는 롤 창 함수를 정의한다 : 생성 된 각각의 윈도우와 두 번째 원래 데이터 셋 간의 상관 관계를 계산한다. 이 방법은 잘 작동합니다 :

for win in rolling_window(c, len(d)): 
    print(np.correlate(win, d)) 

출력 :

[50] 
[75] 
[100] 
[125] 
[150] 
[175] 
[200] 
[209] 
[200] 
[175] 
[150] 
[125] 
[100] 
[75] 
[50] 

내가 팬더와 그것을 해결하려고하면 :

a = pd.DataFrame([1,2,3,4,5,6,7,8,9,8,7,6,5,4,3,2,1]) 
b = pd.DataFrame([8,9,8]) 

에 상관없이 내가 DataFrame의 rolling_corr를 사용하는 경우 :

a.rolling(window=3, center=True).corr(b) 

또는 팬더 r olling_corr :

pd.rolling_corr(a, b, window=1, center=True) 

난 그냥 NaN을 한 무리의 수 :

 0 
0 NaN 
1 0.0 
2 NaN 
3 NaN 
4 NaN 
5 NaN 
6 NaN 
7 NaN 
8 NaN 
9 NaN 
10 NaN 
11 NaN 
12 NaN 
13 NaN 
14 NaN 
15 NaN 
16 NaN 

누군가가 나에게 손을 줄 수 있습니까? 내가

a.values.ravel() 

그러나 팬더 DataFrame 변환에서 얻은 NumPy와 배열을 병합하여 NumPy와 함께 문제를 해결할 수 있어요, 내가 팬더와 완전히 계산을 해결하고 싶습니다. 설명서를 검색했지만 찾고있는 답변을 찾지 못했습니다. 나는 무엇을 놓치고 있지 않느냐?

대단히 감사합니다.

D. 당신이하려는 계산은 다음과 dataframe에서 작동으로 간주 할 수 있습니다

답변

2

:

pd.concat([a, b], axis=1) 
0 0 
0 1 8 
1 2 9 
2 3 8 
3 4 NaN 
4 5 NaN 
5 6 NaN 
6 7 NaN 
7 8 NaN 
8 9 NaN 
9 8 NaN 
10 7 NaN 
11 6 NaN 
12 5 NaN 
13 4 NaN 
14 3 NaN 
15 2 NaN 
16 1 NaN 

당신이 창 = 3을 사용하는 경우, 그것은 상관 관계 처음 세 값은 b이고 처음 값은 a이고 나머지 값은 NaN이며 창 중앙 (center = True)에 값을 배치합니다.

당신이 시도 할 수 : 이

pd.rolling_apply(a, window=3, func=lambda x: np.correlate(x, b[0])) 

출력 : 너무 여기

 0 
0 NaN 
1 NaN 
2 50 
3 75 
4 100 
5 125 
6 150 
7 175 
8 200 
9 209 
10 200 
11 175 
12 150 
13 125 
14 100 
15 75 
16 50 

당신은 센터를 추가 할 수 = True를 원하는 경우.

(팬더 0.17.0 사용)

+0

고맙습니다. – mosegui