2017-08-08 20 views
0

移的數據幀我有一個名爲DF1數據框如下:Python 2.7版:白天和列值

DF1:

   a b id 
2010-01-01  2 3 21 
2010-01-01  2 4 22 
2010-01-01  3 5 23 
2010-01-01  4 6 24 
2010-01-02  1 4 21 
2010-01-02  2 5 22 
2010-01-02  3 6 23 
2010-01-02  4 7 24 
2010-01-03  1 8 21 
2010-01-03  2 9 22 
2010-01-03  3 10 23 
2010-01-03  4 11 24 
........................... 

我想轉移的A,B和id的值, i行值成爲i + 1行值。正如你可以看到df1,同一日期有幾行,而id是不同的。我想轉移df1,我的意思是2010-01-02的值是基於id的2010-01-03值(我的意思是2010-01-02值爲21,是2010-01- 03值爲21)。謝謝!

我想要的答案:

   a b id 
2010-01-01  Nan Nan Nan 
2010-01-01  Nan Nan Nan 
2010-01-01  Nan Nan Nan 
2010-01-01  Nan Nan Nan 
2010-01-02  2 3 21 
2010-01-02  2 4 22 
2010-01-02  3 5 23 
2010-01-02  4 6 24 
2010-01-03  1 4 21 
2010-01-03  2 5 22 
2010-01-03  3 6 23 
2010-01-03  4 7 24 
........................... 
+0

你能張貼設置你想要的數據? – MaxU

+0

是每行日期的行數和標識值集合是否相同?我問的是2010-01-01我們有四行,2010-01-02也有四行。這是整個數據的情況嗎?所有日期都有四行嗎?另外,在這個例子中,這組id值是21到24.整個數據是否一致? –

+0

感謝您的意見!有多少行,id是一樣的 – tktktk0711

回答

1

如果所有組長度相同(樣品4)DatetimeIndex排序:

df2 = df.shift((df.index == df.index[0]).sum()) 
print (df2) 
       a b id 
2010-01-01 NaN NaN NaN 
2010-01-01 NaN NaN NaN 
2010-01-01 NaN NaN NaN 
2010-01-01 NaN NaN NaN 
2010-01-02 2.0 3.0 21.0 
2010-01-02 2.0 4.0 22.0 
2010-01-02 3.0 5.0 23.0 
2010-01-02 4.0 6.0 24.0 
2010-01-03 1.0 4.0 21.0 
2010-01-03 2.0 5.0 22.0 
2010-01-03 3.0 6.0 23.0 
2010-01-03 4.0 7.0 24.0 

但是,如果需要一個日班指數值:

df3 = df.shift(1, freq='D') 
print (df3) 
      a b id 
2010-01-02 2 3 21 
2010-01-02 2 4 22 
2010-01-02 3 5 23 
2010-01-02 4 6 24 
2010-01-03 1 4 21 
2010-01-03 2 5 22 
2010-01-03 3 6 23 
2010-01-03 4 7 24 
2010-01-04 1 8 21 
2010-01-04 2 9 22 
2010-01-04 3 10 23 
2010-01-04 4 11 24 
1

其中一個方法是用形狀的幫助,如果該日期即排序

df.shift(df.loc[df.index[0]].shape[0]) 
# Or len 
df.shift(len(df.loc[df.index[0]])) 

輸出:

 
       a b id 
2010-01-01 NaN NaN NaN 
2010-01-01 NaN NaN NaN 
2010-01-01 NaN NaN NaN 
2010-01-01 NaN NaN NaN 
2010-01-02 2.0 3.0 21.0 
2010-01-02 2.0 4.0 22.0 
2010-01-02 3.0 5.0 23.0 
2010-01-02 4.0 6.0 24.0 
2010-01-03 1.0 4.0 21.0 
2010-01-03 2.0 5.0 22.0 
2010-01-03 3.0 6.0 23.0 
2010-01-03 4.0 7.0 24.0