2016-12-08 42 views
1

我試圖找到一種方式在熊貓數據框中獲得第二天(本例中的下一行)。我認爲這很容易找到,但Im掙扎。熊貓數據框中的第二天或下一行索引

開始數據

ts = pd.DataFrame(np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000)) 
ts.columns = ['Val'] 
ts['Week'] = ts.index.week 
ts 

      Val  Week 
2000-01-01 -0.639345 52 
2000-01-02 1.294537 52 
2000-01-03 1.181486 1 
2000-01-04 -0.011694 1 
2000-01-05 -0.224887 1 
2000-01-06 -0.493120 1 
2000-01-07 1.439436 1 
2000-01-08 1.017722 1 
2000-01-09 1.125153 1 
2000-01-10 0.209741 2 

的數據子集:

tsSig = ts[ts.Val>1.5].drop_duplicates(subset='Week') 

tsSig.head() 


       Val Week 
2000-01-24 2.215559 4 
2000-02-09 1.561941 6 
2000-02-24 1.645916 8 
2000-03-16 1.745079 11 
2000-04-10 1.570023 15 

我現在想用指數從我tsSig子找到第二天ts然後創建一個新的列ts['Val_Dayplus1'],顯示第25個(-0.309811),第10個(-1.644814 )等

我想要的東西像ts.loc[tsSig.index].shift(1)得到第二天但這顯然是不正確的....

所需的輸出:

    Val Val_Dayplus1 Week 
2000-01-24 2.215559 -0.309811  4 
2000-02-09 1.561941 -1.644814  6 
2000-02-24 1.645916 -0.187440  8 

(在tsSig所有行。指數)

編輯:

此出現以便在日期索引tsSig.index上提供我所需的信息。我想聽聽其他任何方式來做到這一點。

ts.loc[tsSig.index + pd.DateOffset(days=1)] 
tsSig['Val_Dayplus1'] = ts['Val'].ix[tsSig.index + pd.DateOffset(days=1)].values 

回答

1

我設法工作這一個這樣共享了答案:

ts.loc[tsSig.index + pd.DateOffset(days=1)] 
    tsSig['Val_Dayplus1'] = ts['Val'].ix[tsSig.index + pd.DateOffset(days=1)].values 

tsSig 

       Val Week Val_Dayplus1 
2000-02-15 1.551125 7 -0.102154 
2000-02-24 1.525402 8 -0.009776 
2000-03-11 1.801845 10 0.832837 
2000-03-22 1.546953 12 0.377510 
2000-04-17 1.568720 16 -0.258558 
2000-06-04 1.646147 22 0.853044 
0

我不知道如果我完全理解你的問題,但在一般情況下,你可以通過使用以df.iloc[ROWS,COLS]一個大熊貓數據幀索引。因此,對於您的情況,對於for循環中的索引i,您可以索引ts.iloc[i+1,:],以獲取ts數據框中下一行的所有信息。

+0

我已經加入數據,所以請告訴我你是什麼意思。我已經給出了期望的輸出。 – ade1e

相關問題