2015-05-31 14 views
7

मेरे पास कुछ डेटा है जो मैं डेटाफ्रेम और पांडा से निपट रहा हूं। उनमें लगभग 10 000 पंक्तियां और 6 कॉलम हैं।गैर-समय-श्रृंखला डेटा resampling

समस्या यह है कि मैंने कई परीक्षण किए हैं और विभिन्न डेटासेट में थोड़ा अलग इंडेक्स नंबर हैं। (यह कई सामग्रियों के साथ "बल-लंबाई" परीक्षण है और निश्चित रूप से मापन बिंदु पूरी तरह से संरेखित नहीं हैं।)

अब मेरा विचार था कि इंडेक्स का उपयोग करके डेटा को "अनुकरण" करने के लिए जिसमें लंबाई के लिए मूल्य शामिल है । ऐसा लगता है कि पांडा में resampling समारोह केवल डेटाटाइम डेटाटाइप के लिए उपलब्ध है।

मैंने इंडेक्स को to_datetime के माध्यम से बदलने की कोशिश की और सफल हुआ। लेकिन पुनर्मूल्यांकन के बाद, मुझे मूल पैमाने पर वापस जाने की जरूरत है। कुछ प्रकार का from_datetime फ़ंक्शन।

क्या कोई रास्ता है?

या मैं पूरी तरह से गलत ट्रैक पर हूं और समूहबी जैसे कार्यों का बेहतर उपयोग करना चाहिए?

पहले से ही धन्यवाद!

संपादित करें:

स्पष्ट रूप से पर्याप्त नहीं पूछने के लिए खेद है। मैं एक बहुत ही अनुभवहीन पायथन उपयोगकर्ता हूं और इस मंच के लिए नया हूं ..

डेटा लॉक नीचे जैसा है। लेनगेट का उपयोग इंडेक्स के रूप में किया जाता है। उन डेटाफ्रेमों में से मेरे पास कुछ है ताकि यह उन सभी को एक ही "framerate" के साथ आवंटित करने के लिए वास्तव में अच्छा हो और फिर उन्हें काट दें। ताकि मैं विभिन्न डेटासेट की तुलना कर सकूं।

आइडिया मैं पहले से ही करने की कोशिश की थी इस एक:

df_1_dt = df_1 #generate a table for the conversion 
    df_1_dt.index = pd.to_datetime(df_1_dt.index, unit='s') # convert it simulating seconds.. good idea?! 
    df_1_dt_rs= df_1_dt # generate a df for the resampling 
    df_1_dt_rs = df_1_dt_rs.resample (rule='s') #resample by the generatet time 

डाटा:

+---------------------------------------------------+ 
¦ Index (Lenght) ¦ Force1  ¦ Force2  ¦ 
¦-------------------+---------------+---------------¦ 
¦ 8.04662074828e-06 ¦ 4.74251270294 ¦ 4.72051584721 ¦ 
¦ 8.0898882798e-06 ¦ 4.72051584721 ¦ 4.72161570191 ¦ 
¦ 1.61797765596e-05 ¦ 4.69851899147 ¦ 4.72271555662 ¦ 
¦ 1.65476570973e-05 ¦ 4.65452528 ¦ 4.72491526604 ¦ 
¦ 2.41398605024e-05 ¦ 4.67945501539 ¦ 4.72589291467 ¦ 
¦ 2.42696630876e-05 ¦ 4.70438475079 ¦ 4.7268705633 ¦ 
¦ 9.60953101751e-05 ¦ 4.72931448619 ¦ 4.72784821192 ¦ 
¦ 0.00507703541206 ¦ 4.80410369237 ¦ 4.73078115781 ¦ 
¦ 0.00513927175509 ¦ 4.87889289856 ¦ 4.7337141037 ¦ 
¦ 0.00868965311878 ¦ 4.9349848032 ¦ 4.74251282215 ¦ 
¦ 0.00902026197556 ¦ 4.99107670784 ¦ 4.7513115406 ¦ 
¦ 0.00929150878827 ¦ 5.10326051712 ¦ 4.76890897751 ¦ 
¦ 0.0291729332784 ¦ 5.14945375919 ¦ 4.78650641441 ¦ 
¦ 0.0296332588857 ¦ 5.17255038023 ¦ 4.79530513287 ¦ 
¦ 0.0297080942518 ¦ 5.19564700127 ¦ 4.80410385132 ¦ 
¦ 0.0362595526707 ¦ 5.2187436223 ¦ 4.54 ¦ 
¦ 0.0370305483177 ¦ 5.24184024334 ¦ 4.81290256977 ¦ 
¦ 0.0381506204153 ¦ 5.28803348541 ¦ 4.82170128822 ¦ 
¦ 0.0444440795306 ¦ 5.30783069134 ¦ 4.83050000668 ¦ 
¦ 0.0450121369102 ¦ 5.3177292943 ¦ 4.8348993659 ¦ 
¦ 0.0453465140473 ¦ 5.32762789726 ¦ 4.83929872513 ¦ 
¦ 0.0515533437013 ¦ 5.33752650023 ¦ 4.85359662771 ¦ 
¦ 0.05262489708  ¦ 5.34742510319 ¦ 4.8678945303 ¦ 
¦ 0.0541273847206 ¦ 5.36722230911 ¦ 4.89649033546 ¦ 
¦ 0.0600755845953 ¦ 5.37822067738 ¦ 4.92508614063 ¦ 
¦ 0.0607712385295 ¦ 5.38371986151 ¦ 4.93938404322 ¦ 
¦ 0.0612954159368 ¦ 5.38921904564 ¦ 4.9536819458 ¦ 
¦ 0.0670288249293 ¦ 5.39471822977 ¦ 4.97457891703 ¦ 
¦ 0.0683640870058 ¦ 5.4002174139 ¦ 4.99547588825 ¦ 
¦ 0.0703192637772 ¦ 5.41121578217 ¦ 5.0372698307 ¦ 
¦ 0.0757871634772 ¦ 5.43981158733 ¦ 5.07906377316 ¦ 
¦ 0.0766597757545 ¦ 5.45410948992 ¦ 5.09996074438 ¦ 
¦ 0.077317850103 ¦ 5.4684073925 ¦ 5.12085771561 ¦ 
¦ 0.0825991083545 ¦ 5.48270529509 ¦ 5.13295596838 ¦ 
¦ 0.0841354654428 ¦ 5.49700319767 ¦ 5.14505422115 ¦ 
¦ 0.0865525182528 ¦ 5.52559900284 ¦ 5.1692507267 ¦ 
+---------------------------------------------------+ 
+5

कृपया अपने डेटा और वांछित आउटपुट का एक छोटा सा उदाहरण पोस्ट करें। – unutbu

+0

ऐसा करने के कुछ अन्य तरीके होने चाहिए, लेकिन वे इस बात पर निर्भर करते हैं कि आप इसे कैसे दोहराना चाहते हैं। यहां पुन: प्रयास करने का उद्देश्य क्या है? क्या आप लापता मूल्यों को अलग करना चाहते हैं? अधिक नियमित अंतराल पर मूल्य है? हो सकता है कि आप वांछित आउटपुट का भी वर्णन कर सकें। – ASGM

उत्तर

1

ऐसा लगता है सब आप क्या करना चाहते तरह दौर एक कम सटीक करने के लिए लंबाई आंकड़े है।

यदि यह मामला है, तो आप सिर्फ में निर्मित गोलाई समारोह इस्तेमाल कर सकते हैं:

(डमी डेटा)

>>> df=pd.DataFrame([[1.0000005,4],[1.232463632,5],[5.234652,9],[5.675322,10]],columns=['length','force']) 
>>> df 
33:  length force 
0 1.000001  4 
1 1.232464  5 
2 5.234652  9 
3 5.675322  10 
>>> df['rounded_length'] = df.length.apply(round, ndigits=0) 
>>> df 
34:  length force rounded_length 
0 1.000001  4    1.0 
1 1.232464  5    1.0 
2 5.234652  9    5.0 
3 5.675322  10    6.0 
>>> 

तो आप उपयोग कर प्रतिदर्श चैनल() .... कार्यप्रवाह को दोहराने सकता है समूहबी:

>>> df.groupby('rounded_length').mean().force 
35: rounded_length 
1.0  4.5 
5.0  9.0 
6.0 10.0 
Name: force, dtype: float64 

आम तौर पर, बस तारीखों के लिए पुन: नमूना है। यदि आप इसे तिथियों के अलावा किसी अन्य चीज़ के लिए उपयोग कर रहे हैं, तो शायद एक और अधिक सुरुचिपूर्ण समाधान है!

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