get previous value of pandas datetime index

后端 未结 2 796
借酒劲吻你
借酒劲吻你 2021-02-12 11:22

I have a pandas dataframe with datetime index

Date
2013-02-22 00:00:00+00:00    0.280001
2013-02-25 00:00:00+00:00    0.109999
2013-02-26 00:00:00+00:00   -0.15         


        
相关标签:
2条回答
  • 2021-02-12 11:48

    Could you just do df.shift().loc[date]?

    0 讨论(0)
  • 2021-02-12 12:05

    Here's one way to do it, first grab the integer location of the index key via get_loc:

    In [15]: t = pd.Timestamp("2013-02-27 00:00:00+00:00")
    
    In [16]: df1.index.get_loc(t)
    Out[16]: 3
    

    And then you can use iloc (to get the integer location, or slice by integer location):

    In [17]: loc = df1.index.get_loc(t)
    
    In [18]: df.iloc[loc - 1]
    Out[18]: 
    Date    2013-02-26 00:00:00
                          -0.15
    Name: 2, Dtype: object
    
    In [19]: df1.iloc[slice(max(0, loc-3), min(loc, len(df)))]
            # the min and max feel slightly hacky (!) but needed incase it's within top or bottom 3
    Out[19]:                         
    Date                    
    2013-02-22  0.280001
    2013-02-25  0.109999
    2013-02-26 -0.150000
    

    See the indexing section of the docs.


    I'm not quite sure how you set up your DataFrame, but that doesn't look like a Datetime Index to me. Here's how I got the DataFrame (with Timestamp index):

    In [11]: df = pd.read_clipboard(sep='\s\s+', header=None, parse_dates=[0], names=['Date', None])
    
    In [12]: df
    Out[12]: 
                     Date          
    0 2013-02-22 00:00:00  0.280001
    1 2013-02-25 00:00:00  0.109999
    2 2013-02-26 00:00:00 -0.150000
    3 2013-02-27 00:00:00  0.130001
    4 2013-02-28 00:00:00  0.139999
    
    In [13]: df1 = df.set_index('Date')
    
    In [14]: df1
    Out[14]:                
    Date                
    2013-02-22  0.280001
    2013-02-25  0.109999
    2013-02-26 -0.150000
    2013-02-27  0.130001
    2013-02-28  0.139999
    
    0 讨论(0)
提交回复
热议问题