首页 > 解决方案 > Pandas.Series 在已知日期之前获得 10 个值

问题描述

我有一个看起来像这样的 pandas.Series

data = 
                  '.INX'
    Date
    2019-01-29    2640.000000
    2019-01-30    2681.005561
    2019-01-31    2689.750205
    2019-02-01    2751.544352
    2019-02-04    2745.497311
    2019-02-05    2767.970645
    2019-02-06    2798.255994
    2019-02-07    2707.690765
    2019-02-08    2703.569149
    2019-02-11    2640.521470
    2019-02-12    2645.174583
    2019-02-13    2644.231926
    2019-02-14    2658.562312
    2019-02-15    2658.030814
    2019-02-19    2607.297839
    2019-02-20    2553.135199
    2019-02-21    2553.355821
    2019-02-22    2514.045036
    2019-02-25    2474.393290
    2019-02-26    2423.449722

我想在“2019-02-20”之前获得 10 个历史数据点,但无法弄清楚如何。

我试过:

data['2019-02-20':-10]

而且,可能并不令我惊讶,它没有用。我可以巧妙地混合索引类型,还是必须获取索引并找到正确的日期?

标签: pythonpandastime-series

解决方案


看起来“日期”是您的索引,因此如果索引还不是日期时间,您可以尝试转换为日期时间

df.index = pd.to_datetime(df.index)

然后你可以这样做:

df.loc[df.index < '2019-02-20'].tail(10)

或者:

# extract 11 rows ending with the said date
# then taking top 10 rows
df.loc[:'2019-02-20'].tail(11).head(10)

注意:如果查询日期不在索引中,则第二种方法似乎无法按预期工作。

输出:

                 '.INX'
Date                   
2019-02-05  2767.970645
2019-02-06  2798.255994
2019-02-07  2707.690765
2019-02-08  2703.569149
2019-02-11  2640.521470
2019-02-12  2645.174583
2019-02-13  2644.231926
2019-02-14  2658.562312
2019-02-15  2658.030814
2019-02-19  2607.297839

推荐阅读