Pandas.Series在已知日期之前获得10个值

时间:2019-06-07 13:46:59

标签: python pandas time-series

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

s = df['peak'].cumsum()
df['time_elapsed'] = df['time'].sub(df.groupby(['cycle', s])['time'].transform('first'))

我想在'2019-02-20'之前获得10个历史数据点,但无法弄清楚该怎么做。

我尝试过:

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

并且,也许并不奇怪,它没有起作用。我可以以一种聪明的方式来混合索引类型,还是必须获取索引并找到正确的日期?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

使用Index.get_loc来排名,因此可以使用DataFrame.iloc

p = data.index.get_loc('2019-02-20') + 1
df = data.iloc[p-10:p]
print (df)
                  .INX'
'Date                  
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