我正试图找到一种方法来获取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
答案 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
数据框中下一行的所有信息。