首页 > 解决方案 > 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    

标签: pythonpandasdatetime

解决方案


同意,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

推荐阅读