从 .loc 获取上一行

Sat*_*nix 2 python pandas

我有这个数据框date用作索引。

            close
date             
1999-11-18  44.00
1999-11-19  40.38
1999-11-22  44.00
1999-11-23  40.25
1999-11-24  41.06
Run Code Online (Sandbox Code Playgroud)

给定一个任意日期,我想检索位于该日期n之前或之后的行。

例如:

df.loc["1999-11-22"] # Gives third row
df.loc["1999-11-22"].previous_row(-2) # Should give row 1999-11-18
Run Code Online (Sandbox Code Playgroud)

显然previous_row不存在。我试过,shift(-2)但这似乎不起作用:date保持不变并close变成NaN.

df.loc["1999-11-22"].shift(-1)
close   NaN
Name: 1999-11-22 00:00:00, dtype: float64
Run Code Online (Sandbox Code Playgroud)

有没有一种不涉及克隆整个数据集的简单方法?

And*_*den 7

您可以使用index.get_loc

In [11]: df.index.get_loc("1999-11-22")
Out[11]: 2

In [12]: df.iloc[df.index.get_loc("1999-11-22") - 2]
Out[12]:
close    44.0
Name: 1999-11-18, dtype: float64
Run Code Online (Sandbox Code Playgroud)