2017-08-08 21 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