2013-02-08 14 views
5

Vorrei applicare scipy.stats.linregress all'interno di Pandas ByGroup. Avevo guardato attraverso la documentazione, ma tutto quello che potevo vedere era come applicare qualcosa da una singola colonna comeCome applicare linregress in Pandas per gruppo

grouped.agg(np.sum) 

o una funzione come

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

Ma come faccio ad applicare un linregress che ha due ingressi X e Y?

risposta

4

La funzione linregress, così come molte altre funzioni di scipy/numpy, accetta "array" come X e Y, entrambe le serie e DataFrame potrebbero qualificarsi.

Ad esempio:

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) 

Infatti, essendo in grado di utilizzare SciPy (e NumPy) funzioni è una delle caratteristiche panda assassine!

Quindi, se si dispone di un dataframe è possibile utilizzare linregress sulle sue colonne (che sono di serie):

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

e se si utilizza un groupby è possibile simile apply (per ogni gruppo):

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

Grazie Andy, Sì, può accettarlo. La domanda è come farlo BYGROUP. Ad esempio, ho datetime che ho raggruppato in anno e mese. Voglio fare la regressione lineare per ciascuno dei gruppi quindi restituire i valori dalla regressione di lin. Inoltre ho un DataFram quindi come posso applicare quello usando due colonne nel DF? Grazie Jason – user1911866

+0

@ user1911866 aggiornato con questi :) Buona fortuna. –

+0

@ user1911866 inoltre, vedere [questa domanda e la sua risposta] (http://stackoverflow.com/questions/12410438/how-to-use-pandas-groupby-apply-without-adding-an-extra-index). –

Problemi correlati