Pandas Data框架中的下一天或下一行索引

时间:2016-12-08 20:29:09

标签: python pandas

我正试图找到一种方法来获取Pandas数据帧中的第二天(在本例中为下一行)。我觉得这很容易找到,但我正在努力。

开始数据

    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天的值{{1} }),10th(-0.309811)等。

我正在尝试-1.644814这样的事情来获得第二天,但这显然不正确......

期望的输出:

ts.loc[tsSig.index].shift(1)

(对于tsSig.index中的所有行)

修改

这似乎给了我在 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.index

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我不确定我是否完全理解您的问题,但一般情况下,您可以使用df.iloc[ROWS,COLS]索引pandas数据框。因此,在您的情况下,对于for循环中的索引i,您可以索引ts.iloc[i+1,:],以获取ts数据框中下一行的所有信息。