【问题标题】:Python: Finding the input of pandas DatetimeIndex.asof()Python:查找熊猫 DatetimeIndex.asof() 的输入
【发布时间】:2019-01-08 09:18:01
【问题描述】:

我正在尝试使用pandas.DatetimeIndex.asof() 来查找最接近某个日期的值。但是,这个函数的输入到底是什么?

documentation 声明输入是一个标签,但格式是什么?

更具体地说,我有一个如下所示的 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    

【问题讨论】:

    标签: python pandas datetime


    【解决方案1】:

    同意,文档中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
    

    【讨论】:

    • True:后一个选项可能确实更好地找到真正的最接近的值。另外,不要忘记DatetimeIndex.asof() 需要排序索引
    猜你喜欢
    • 1970-01-01
    • 2016-05-29
    • 1970-01-01
    • 2020-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多