2016-06-07 107 views
-2

我想用熊貓做一些與ffill一些常規時間系列,但我得到一個非唯一索引錯誤。熊貓.asfreq給出了一個重複的索引錯誤

這裏是我的代碼:

for d in data_types: 
    series = df[df['datatype'] == d]['measurementvalue'].values 
    times = df[df['datatype'] == d]['displaydate'].values 
    data_series = pd.Series(series, index = times) 
    data_series.drop_duplicates(inplace = True) 
    data_series.asfreq('30Min', method = 'ffill') 
    all_series.append(data_series) 

我收到以下錯誤作爲asfreq調用一個特定data_type結果:

ValueError: cannot reindex a non-unique index with a method or limit 

這是一組數據,其中drop_duplicates導致長度從2119降至1299,表明它是最密集的(時間明智的)值。

==========

編輯

我做了一些閒逛,並花時間滯後於指數最近的第二收窄的問題,我可以看到當兩行落入同一秒時創建的'重複'索引。我的猜測是,這些是違規的行...

2016-03-02 04:03:29.693 8.250347 
2016-03-02 04:03:29.693 7.478983 
2016-03-06 00:19:30.183 45.97248 
2016-03-06 00:19:30.183 24.06088 
2016-03-14 02:44:58.783 9.169300 
2016-03-14 02:44:58.783 4.221998 
2016-03-18 21:54:20.097 73.80586 
2016-03-24 16:41:19.825 3.608202 
2016-03-24 16:41:19.825 3.887996 
2016-03-25 03:35:57.197 4.974968 
2016-03-25 03:35:57.197 5.638140 
2016-04-02 11:18:27.290 7.923712 
2016-04-02 11:18:27.290 6.143240 
2016-04-10 19:59:54.677  3.143636 
2016-04-10 19:59:54.686 14.222390 

什麼是最好的方式來刪除值?假設我想編寫一個自定義方法,將給定索引值的所有重複值發送給我,併發迴應該用於該索引值的單個值。我怎樣才能做到這一點?

+0

這意味着你已經在你的數據幀複製指標。要看到它:'df [df.index.duplicated()]'也看看 http://stackoverflow.com/questions/27236275/what-does-valueerror-cannot-reindex-from-a-複製軸平均 和 http://stackoverflow.com/questions/27711623/valueerror-cannot-reindex-from-a-duplicate-axis –

+0

還,每當發佈,其最好的,包括樣本數據,使得您的問題「[Minimum,Complete,and Reproducible](http://stackoverflow.com/help/mcve)」 –

+0

@michael_j_ward感謝您的建議。我不知道那個方法調用。知道未來很方便。不幸的是,它不能幫助我,因爲原始指標不會重複。當我施加頻率時,它們只會被複制。我現在添加更多數據。 – helloB

回答

0

嘗試這樣的事情,但既然你沒有包含任何數據,這只是一個起動器。

for d in data_types: 
     rawDf  = df[df['datatype'] == d] 
     data_series = rawDf[['measurementvalue','displaydate']] 
     data_series.set_index('displaydate',drop=False, inplace = True) 
     data_series.drop_duplicates(inplace = True) 
     data_series.asfreq('30Min', method = 'ffill') 
     all_series.append(data_series) 
+1

感謝您的建議,但仍然產生錯誤。我想我現在知道錯誤的來源,儘管我不知道修正。我現在正在編輯我的問題以包含有關數據的更多信息。 – helloB

+0

正確,那麼如何編寫邏輯刪除值以及如果我想結合它們的值呢? – helloB

+0

讓我們說我想保持最大。 – helloB

0

如果您想保留每個日期時間的最大值。首先讓DATE_TIME列,並使用

df.groupby('date_time').max() 

如果你想始終保持第一或最後一個條目,look at this answer