2013-08-04 10 views
9

मेरे पास डेटाफ्रेम में लोड किया गया डेटा है जिसमें कॉलम हेडर के लिए एक बहु अनुक्रमणिका है। वर्तमान में मैं इस तरह समूहों में से मतलब लेने के लिए और 95% विश्वास अंतराल की गणना करने के कॉलम सूचकांक के आधार पर डेटा समूहीकरण किया गया है:पांडा समूह समूह समूहों में NaN को अनदेखा करने में मानक त्रुटि

from pandas import * 
import pandas as pd 
from scipy import stats as st 

#Normalize to starting point then convert 
normalized = (data - data.ix[0]) * 11.11111 
#Group normalized data based on slope and orientation 
grouped = normalized.groupby(level=['SLOPE','DEPTH'], axis=1) 
#Obtain mean of each group 
means = grouped.mean() 
#Calculate 95% confidence interval for each group 
ci = grouped.aggregate(lambda x: st.sem(x) * 1.96) 

लेकिन इस के साथ समस्या यह है कि इसका मतलब है कि समारोह पर इस्तेमाल किया जाता है समूह NaN मानों को अनदेखा करते हैं जबकि समूह में NaN होने पर scipy function st.sem NaN देता है। नाइन को अनदेखा करते समय मुझे मानक त्रुटि की गणना करने की आवश्यकता है क्योंकि औसत कार्य करता है।

मैं इस तरह 95% विश्वास अंतराल की गणना के बारे में जा रहा कोशिश की है:

numpy में
#Calculate 95% confidence interval for each group 
ci = grouped.aggregate(lambda x: np.std(x)/??? * 1.96) 

एसटीडी NaN मूल्यों की अनदेखी मुझे मानक विचलन दे देंगे, लेकिन मैं के वर्गमूल से इस विभाजित करने की आवश्यकता मानक त्रुटि प्राप्त करने के लिए NaNs को अनदेखा करने वाला समूह आकार।

NaNs को अनदेखा करते समय मानक त्रुटि की गणना करने का सबसे आसान तरीका क्या है?

import pandas as pd 
s = pd.Series([1,2,np.nan, 3]) 
print s.count() 

उत्पादन:

3 

तो, कोशिश:

Series वस्तु की
+0

कोशिश अपने 'GroupBy में शामिल करने के लिए () 'इसे कार्य करें: 'normalized.groupby (द्वारा = [col_name_with_NaN], स्तर = [' स्लोपे ',' डेपथ '], अक्ष = 1)', ताकि ' NaN' मानों को 'समूहित' –

+0

में प्रकट नहीं होना चाहिए 36 कॉलम हैं और किसी भी पंक्ति यानी NaNs हो सकते हैं। खोए आँकड़े। क्या आप सभी कॉलम नामों की सूची उत्तीर्ण करने का सुझाव दे रहे हैं? द्वारा = [] तर्क क्या करता है? मैं चारों ओर देख रहा हूं लेकिन इसे समझने के लिए प्रतीत नहीं होता है। – pbreach

+0

हां, सभी '36' कॉलम नामों को 'by' तर्क से गुजरने का प्रयास करें। मैं वास्तव में यह तर्क नहीं करता हूं, लेकिन यह NaNs को फ़िल्टर करता है ... –

उत्तर

8

count() विधि कोई NaN मूल्य गिनती वापस आ जाएगी

ci = grouped.aggregate(lambda x: np.std(x)/x.count() * 1.96) 
+0

एक आकर्षण की तरह काम किया! धन्यवाद। – pbreach

+5

'grouped.aggregate (lambda x: np.std (x, ddof = 1) /np.sqrt (x.count()))' – Noah

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