python - Python:查找熊猫 DatetimeIndex.asof() 的输入
问题描述
我试图用来pandas.DatetimeIndex.asof()
找到最接近某个日期的值。但是,这个函数的输入到底是什么?
该文档指出输入是一个标签,但格式是什么?
更具体地说,我有一个看起来像这样的 DataFrame,其中 datetime 列设置为索引。我希望代码返回日期时间最接近 2018-07-28 13:00:00 的行的索引。
datetime | price
2018-07-28 12:57:13 8.50
2018-07-28 12:59:45 8.60
2018-07-28 13:01:19 8.70
2018-07-28 13:03:27 8.65
解决方案
同意,label
文档中该词的使用尚不清楚。格式应与您的日期时间格式相同。例如:
# If datetime column is already in datetime format:
df.set_index(df.datetime).asof('2018-07-28 13:00:00')
# If datetime is not already in proper datetime format
df.set_index(pd.to_datetime(df.datetime)).asof('2018-07-28 13:00:00')
返回一系列找到的最接近的日期时间:
datetime 2018-07-28 12:59:45
price 8.6
Name: 2018-07-28 13:00:00, dtype: object
替代解决方案(更好的 IMO)
我认为更好的方法是从datetime
列中减去目标日期时间,找到最小值,然后使用loc
. 通过这种方式,您可以获得真正最接近的值,包括来自它之后的行(asof
仅限于most recent label up to and including the passed label
,如您链接的文档中所述)
>>> df.loc[abs(df.datetime - pd.to_datetime('2018-07-28 13:00:00')).idxmin()]
datetime 2018-07-28 12:59:45
price 8.6
Name: 1, dtype: object
推荐阅读
- css - 在子视图中继承 React-Native 父视图不透明度
- python - 多辆车的所有可能行程
- installation - 无法安装 en_core_web_sm 并出现连接错误
- python - 选择随机行 (Excel):列表分配索引超出范围
- flutter - 无法使用 FCM onBackgroundMessage 导航到特定屏幕
- android - 生成后应用 apk 和 aab 文件仍然很大
- javascript - JQuery 自动完成格式
- python - 为什么提到的闹钟问题存在问题?
- kotlin - 如何格式化带两位小数的数字?
- python-3.x - Nats tls 连接问题:启用 tls python 后无法连接到 nats 服务器