2016-06-14 51 views
2

考慮以下這個簡單的例子:如何獲得Pandas中數據框的移位索引值?

date = pd.date_range('1/1/2011', periods=5, freq='H') 

df = pd.DataFrame({'cat' : ['A', 'A', 'A', 'B', 
         'B']}, index = date) 
df 
Out[278]: 
        cat 
2011-01-01 00:00:00 A 
2011-01-01 01:00:00 A 
2011-01-01 02:00:00 A 
2011-01-01 03:00:00 B 
2011-01-01 04:00:00 B 

我希望創建一個包含索引的滯後/鉛值的變量。這是一樣的東西:

df['index_shifted']=df.index.shift(1) 

所以,舉例來說,在時間2011-01-01 01:00:00我希望變量index_shifted2011-01-01 00:00:00

我怎麼能這樣做? 謝謝!

+0

df.index給'等等等等 '2016年6月13日十六時29分00秒'], D類='datetime64 [NS] ',長度= 2471070,頻率=無)'這是一個問題嗎? –

回答

5

我認爲你需要Index.shift-1

df['index_shifted']= df.index.shift(-1) 
print (df) 
        cat  index_shifted 
2011-01-01 00:00:00 A 2010-12-31 23:00:00 
2011-01-01 01:00:00 A 2011-01-01 00:00:00 
2011-01-01 02:00:00 A 2011-01-01 01:00:00 
2011-01-01 03:00:00 B 2011-01-01 02:00:00 
2011-01-01 04:00:00 B 2011-01-01 03:00:00 

對我來說,工作沒有freq,但也許它是在真實的數據需要:

df['index_shifted']= df.index.shift(-1, freq='H') 
print (df) 
        cat  index_shifted 
2011-01-01 00:00:00 A 2010-12-31 23:00:00 
2011-01-01 01:00:00 A 2011-01-01 00:00:00 
2011-01-01 02:00:00 A 2011-01-01 01:00:00 
2011-01-01 03:00:00 B 2011-01-01 02:00:00 
2011-01-01 04:00:00 B 2011-01-01 03:00:00 

編輯:

如果DatetimeIndexfreqNone,你需要添加freqshift

import pandas as pd 

date = pd.date_range('1/1/2011', periods=5, freq='H').union(pd.date_range('5/1/2011', periods=5, freq='H')) 


df = pd.DataFrame({'cat' : ['A', 'A', 'A', 'B', 
         'B','A', 'A', 'A', 'B', 
         'B']}, index = date) 

print (df.index) 
DatetimeIndex(['2011-01-01 00:00:00', '2011-01-01 01:00:00', 
       '2011-01-01 02:00:00', '2011-01-01 03:00:00', 
       '2011-01-01 04:00:00', '2011-05-01 00:00:00', 
       '2011-05-01 01:00:00', '2011-05-01 02:00:00', 
       '2011-05-01 03:00:00', '2011-05-01 04:00:00'], 
       dtype='datetime64[ns]', freq=None) 

df['index_shifted']= df.index.shift(-1, freq='H') 
print (df) 
        cat  index_shifted 
2011-01-01 00:00:00 A 2010-12-31 23:00:00 
2011-01-01 01:00:00 A 2011-01-01 00:00:00 
2011-01-01 02:00:00 A 2011-01-01 01:00:00 
2011-01-01 03:00:00 B 2011-01-01 02:00:00 
2011-01-01 04:00:00 B 2011-01-01 03:00:00 
2011-05-01 00:00:00 A 2011-04-30 23:00:00 
2011-05-01 01:00:00 A 2011-05-01 00:00:00 
2011-05-01 02:00:00 A 2011-05-01 01:00:00 
2011-05-01 03:00:00 B 2011-05-01 02:00:00 
2011-05-01 04:00:00 B 2011-05-01 03:00:00 
1

df['index_shifted']=df.index.shift(-1)有什麼問題?

(正品的問題,不知道如果我錯過了什麼)

+0

我得到'ValueError:不能轉移沒有freq' –

+1

@諾比:奇怪,它在當地正常工作。 'df.index.freq'的結果是什麼?它應該是''。 –

+0

請看我上面的評論 –

相關問題