2014-10-13 23 views
7

में समय आवृत्ति बदलना मेरे पास नीचे एक पांडस डेटाफ्रेम है।पांडस डेटाफ्रेम

df 
           A   B 
date_time          
2014-07-01 06:03:59.614000 62.1250  NaN 
2014-07-01 06:03:59.692000 62.2500  NaN 
2014-07-01 06:13:34.524000 62.2500 241.0625 
2014-07-01 06:13:34.602000 62.2500 241.5000 
2014-07-01 06:15:05.399000 62.2500 241.3750 
2014-07-01 06:15:05.399000 62.2500 241.2500 
2014-07-01 06:15:42.004000 62.2375 241.2500 
2014-07-01 06:15:42.082000 62.2375 241.3750 
2014-07-01 06:15:42.082000 62.2375 240.2500 

मैं नियमित 1 minute अंतराल को यह की आवृत्ति बदलना चाहते हैं। लेकिन नीचे दी गई त्रुटि प्राप्त करें:

new = df.asfreq('1Min') 
>>error: cannot reindex from a duplicate axis 

अब, मैं समझता हूं कि यह क्यों हो रहा है। चूंकि मेरा समय ग्रैन्युलरिटी उच्च है (मिलीसेकंड में) लेकिन अनियमित, मुझे प्रति सेकेंड भी प्रति सेकंड कई रीडिंग मिलते हैं। इसलिए मैंने इन मिलीसेकंद रीडिंग को मिनटों में गठबंधन करने और नीचे दिए गए डुप्लिकेट से छुटकारा पाने की कोशिश की।

# try to convert the index to minutes and drop duplicates 
df['index'] = df.index 
df['minute_index']= df['index'].apply(lambda x: x.strftime('%Y-%m-%d %H:%M')) 
df.drop_duplicates(cols = 'minute_index', inplace = True, take_last = True) 
df_by_minute = df.set_index('minute_index') 
df_by_minute 
         A    B    index 
minute_index              
2014-07-01 06:03 62.2500  NaN 2014-07-01 06:03:59.692000 
2014-07-01 06:13 62.2500  241.50 2014-07-01 06:13:34.602000 
2014-07-01 06:15 62.2375  240.25 2014-07-01 06:15:42.082000 

# now change the frequency to 1 minute but I just get NaNs (!) 
df_by_minute.asfreq('1Min') 
          A   B index 
2014-07-01 06:03:00  NaN  NaN NaT 
2014-07-01 06:04:00  NaN  NaN NaT 
2014-07-01 06:05:00  NaN  NaN NaT 
2014-07-01 06:06:00  NaN  NaN NaT 
2014-07-01 06:07:00  NaN  NaN NaT 
2014-07-01 06:08:00  NaN  NaN NaT 
2014-07-01 06:09:00  NaN  NaN NaT 
2014-07-01 06:10:00  NaN  NaN NaT 
2014-07-01 06:11:00  NaN  NaN NaT 
2014-07-01 06:12:00  NaN  NaN NaT 
2014-07-01 06:13:00  NaN  NaN NaT 
2014-07-01 06:14:00  NaN  NaN NaT 
2014-07-01 06:15:00  NaN  NaN NaT 

जैसा कि आप देखते हैं कि यह काम नहीं करता .. क्या कोई मदद कर सकता है? जो मैं प्राप्त करने की कोशिश कर रहा हूं वह एक ऐसा कार्य प्राप्त करना है जो A or B as of DateTime लौटाता है और डेटटाइम 1 मिनट की वृद्धि में होगा।

उत्तर

4

मुझे लगता है, नहीं asfreq लेकिन resample अपनी आवश्यकताओं फिट बैठता है:

new = df.resample('T', how='mean') 

how विकल्प के लिए, आप भी उपयोग कर सकते हैं 'आखिरी' या 'प्रथम'।

+0

धन्यवाद! काफी निराशाजनक है कि मैंने इस समारोह को पूरी तरह से अनदेखा किया। – Rhubarb

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