我正在尝试找到一种方法来获取 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 个(-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.index 中的所有行)
编辑:
这似乎为我提供了在 tsSig.index
上移动日期索引所需的信息。我也想听听是否有其他方法可以做到这一点。
ts.loc[tsSig.index + pd.DateOffset(days=1)]
tsSig['Val_Dayplus1'] = ts['Val'].ix[tsSig.index + pd.DateOffset(days=1)].values
最佳答案
我设法解决了这个问题,所以分享答案:
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
关于python - Pandas Dataframe 中的第二天或下一行索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41048270/