【问题标题】:How to get the closest single row after a specific datetime index using Python Pandas如何使用 Python Pandas 在特定日期时间索引之后获取最近的单行
【发布时间】:2012-04-10 06:25:02
【问题描述】:

我拥有的数据框:

            A   B   C 
2012-01-01  1   2   3 
2012-01-05  4   5   6 
2012-01-10  7   8   9 
2012-01-15  10  11  12 

我现在使用的是什么:

date_after = dt.datetime( 2012, 1, 7 )
frame.ix[date_after:].ix[0:1]
Out[1]: 
            A  B  C
2012-01-10  7  8  9

有没有更好的方法来做到这一点?我不喜欢我必须指定 .ix[0:1] 而不是 .ix[0],但如果我不指定输出更改为 TimeSeries 而不是 DataFrame 中的单行。我发现在原始 DataFrame 之上使用旋转的 TimeSeries 更加困难。

没有.ix[0:1]

frame.ix[date_after:].ix[0]
Out[1]: 
A    7
B    8
C    9
Name: 2012-01-10 00:00:00

谢谢,

约翰

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    你可能想直接去做索引:

    i = frame.index.searchsorted(date)
    frame.ix[frame.index[i]]
    

    有点冗长,但你可以把它放在一个函数中。和你得到的一样好 (O(log n))

    【解决方案2】:

    忍不住回答这个问题,尽管这个问题在 2012 年由 Wes 本人提出并回答,并在 2015 年由 ajsp 再次提出。是的,除了“截断”之外,您还可以使用带有“回填”选项的get_loc 来获取特定日期之后的最近日期。顺便说一句,如果您想在特定日期之前找到最近的日期,请使用“填充”。如果您只想在附近,请使用“最近”。

    df.iloc[df.index.get_loc(datetime.datetime(2016,2,2),method='backfill')]
    

    【讨论】:

    • 这就是我想要的答案。但看起来“最近”可能会返回 previous 行。 “回填”似乎返回最近的。
    • 你这个厚脸皮的猴子。
    【解决方案3】:

    忍不住回答了这个问题,尽管这个问题是在 2012 年由 Wes 本人提出并回答的。是的,只需使用截断即可。

    df.truncate(before='2012-01-07')
    

    【讨论】:

      猜你喜欢
      • 2021-03-06
      • 2020-01-02
      • 1970-01-01
      • 1970-01-01
      • 2020-06-04
      • 2017-01-01
      • 2017-01-03
      • 2014-03-07
      • 1970-01-01
      相关资源
      最近更新 更多