python - 给定条件在 Pandas 数据框中查找最近的日期
问题描述
我有这个标准普尔 500 历史数据样本,我想比较他里面的日期。
>> 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
latest
设为最新的 SnP OHLC价格
latest = df.iloc[-1]
如何在此数据框索引中找到最接近latest
滞后 1 年的日期(latest.replace(year=latest.year-1)
?仅使用该pd.Timestamp.replace
方法有时不起作用,它可以生成一个不在我的索引中的日期。
解决方案
此方法仅在您的索引列 ('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]
推荐阅读
- matlab - 用不同的颜色标记分段的单元格
- amazon-web-services - AWS Hook-EnactAppDeploy:命令挂钩失败
- sql - 部署后层次结构不可见
- angularjs - ng-click 不适用于以编程方式添加的按钮
- javascript - ExtJS4 - 表单提交按钮周围出现轮廓
- java - Spring服务的可选嵌套注入
- jmeter - 在 JMeter 中,我如何循环直到找到结果
- php - 如何交换字符串中的数字?
- python - 如何使用 Boto3 从 S3 将 gzipped parquet 文件读入 Python?
- java - 用标签中给出的名称填充字符串