2013-02-08 1 views
5

Pandas ByGroup 내에 scipy.stats.linregress를 적용하고 싶습니다. 나는 문서를 통해보고했지만 내가 볼 수있는 모든Pandas bygroup에 linregress를 적용하는 방법

grouped.agg(np.sum) 

또는

grouped.agg('D' : lambda x: np.std(x, ddof=1)) 

같은 기능을하지만 같은 단일 컬럼에 뭔가를 적용하는 방법이었다 나는 두 개의 입력을 가진 linregress을 적용 어떻게 X와 Y?

답변

4

linregress 함수는 다른 많은 scipy/numpy 함수와 마찬가지로 "array-like"X와 Y를 허용하므로 Series와 DataFrame이 모두 적합합니다. 예를 들어

은 : 사실

from scipy.stats import linregress 
X = pd.Series(np.arange(10)) 
Y = pd.Series(np.arange(10)) 

In [4]: linregress(X, Y) 
Out[4]: (1.0, 0.0, 1.0, 4.3749999999999517e-80, 0.0) 

, scipy (그리고 NumPy와) 기능을 사용할 수있는 것은 팬더의 킬러 기능 중 하나입니다! 유사 apply (각 그룹에) 당신을 수 GROUPBY를 사용

linregress(df['col_X'], df['col_Y']) 

을하고있는 경우 : 당신이 DataFrame이있는 경우

그래서 당신은 (시리즈입니다)의 열에 linregress을 사용할 수 있습니다

grouped.apply(lambda x: linregress(x['col_X'], x['col_Y'])) 
+0

감사합니다. Andy, 네, 받아 들일 수 있습니다. 문제는 그것을 BYGROUP하는 방법입니다. 예를 들어, 나는 datetime을 연도와 월에 GROUPED했습니다. 각 그룹에 대해 선형 회귀를 수행하고 lin 회귀 값을 반환합니다. 또한 DataFram을 가지고 있으므로 DF에서 두 개의 열을 사용하여 어떻게 적용 할 수 있습니까? 감사합니다 Jason – user1911866

+0

@ user1911866이 다음으로 업데이트되었습니다 :) Best of luck. –

+0

@ user1911866도 [이 질문 및 답변] (http://stackoverflow.com/questions/12410438/how-to-use-pandas-groupby-apply-without-adding-an-extra-index)을 참조하십시오. –