2013-02-08 30 views
5

में लिनरेग्रेस कैसे लागू करें मैं पांडस बाय ग्रुप के भीतर एक scipy.stats.linregress लागू करना चाहता हूं। मैं प्रलेखन के माध्यम से देखा था, लेकिन सब मैं देख सकता है कि कैसे की तरहपांडस द्वारा समूह

grouped.agg(np.sum) 

या

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

की तरह एक समारोह लेकिन एक एकल स्तंभ के लिए कुछ लागू करने के लिए था कि कैसे मैं एक linregress जो दो आदानों है लागू होते हैं एक्स और वाई?

उत्तर

4

linregress फ़ंक्शन, साथ ही साथ कई अन्य scipy/numpy फ़ंक्शंस, "सरणी की तरह" एक्स और वाई स्वीकार करता है, दोनों श्रृंखला और डेटाफ्रेम योग्य हो सकता है।

उदाहरण के लिए:

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

धन्यवाद एंडी, हाँ यह इसे स्वीकार कर सकता है। प्रश्न यह है कि BYGROUP को कैसे करें। उदाहरण के लिए मेरे पास समय-समय पर है कि मैंने वर्ष और महीने में ग्रुप किया है। मैं प्रत्येक समूह के लिए रैखिक प्रतिगमन करना चाहता हूं, फिर लिन रिग्रेशन से मूल्य वापस कर दूंगा। इसके अलावा मेरे पास डेटाफ्रेम है तो मैं डीएफ में दो कॉलम का उपयोग करके इसे कैसे लागू कर सकता हूं? धन्यवाद जेसन – user1911866

+0

@ user1911866 इनके साथ अद्यतन :) शुभकामनाएं। –

+0

@ user1911866 भी, [यह प्रश्न और उसका उत्तर] देखें (http://stackoverflow.com/questions/12410438/how-to-use-pandas-groupby-apply-without-adding-an-extra-index)। –

संबंधित मुद्दे