问题描述
我有这个标准普尔 500 指数历史数据样本,我想比较他里面的日期。
fname = input("Input your First Name : ")
lname = input("Input your Last Name : ")
print ("Hello " + lname + " " + fname)
input("Want to play Mad Libs?")
if "yes":
print("Great!")
else:
print("Ok,later!")
让 >> df
High Low Open Close Volume Adj Close
Date
2011-01-03 127.599998 125.699997 126.709999 127.050003 138725200.0 104.119293
2011-01-04 127.370003 126.190002 127.330002 126.980003 137409700.0 104.061905
2011-01-05 127.720001 126.459999 126.580002 127.639999 133975300.0 104.602806
2011-01-06 127.830002 127.010002 127.690002 127.389999 122519000.0 104.397934
2011-01-07 127.769997 126.150002 127.559998 127.139999 156034600.0 104.193031
... ... ... ... ... ... ...
2020-12-14 369.799988 364.470001 368.640015 364.660004 69216200.0 363.112183
2020-12-15 369.589996 365.920013 367.399994 369.589996 64071100.0 368.021240
2020-12-16 371.160004 368.869995 369.820007 370.170013 58420500.0 368.598816
2020-12-17 372.459991 371.049988 371.940002 372.239990 64119500.0 370.660004
2020-12-18 371.149994 367.019989 370.970001 369.179993 135359900.0 369.179993
为最新的 SnP OHLC 价格
latest
我如何在此数据帧索引中找到最接近滞后 1 年的
latest = df.iloc[-1]
的日期(latest
?仅使用 latest.replace(year=latest.year-1)
方法有时不起作用,它可以生成不在我索引中的日期。
欢迎任何帮助。
解决方法
此方法仅适用于索引列 ('Date') 包含 DateTime 对象的情况。如果它包含字符串,您首先必须将索引转换为 DateTime 格式。
df.index = pd.to_datetime(df.index)
这样,您可以通过 latest = df.index[-1]
或 df.index.max()
获取最新时间。
然后我们使用 pd.DateOffset
将最新日期偏移一年,并获得理论滞后日期。
lagged_theoretical = latest - pd.DateOffset(years=1)
为了获得实际存在于您的 DataFrame 中的计算日期最接近的日期,我们会计算您的 DataFrame 中所有日期与计算日期之间的时间差。从那里,我们选择了最小值以获得最接近的日期。我们获取 timedelta 数组中最小值的索引,并使用该索引从 DataFrame 的索引列中获取实际日期。完整代码如下:
latest = df.index[-1]
lagged_theoretical = latest - pd.DateOffset(years=1)
td = (abs(df.index - lagged_theoretical)).values
idx = np.where(td == td.min())[0][0]
lagged_actual = df.index[idx]