在as.freq()出现之前选择行

时间:2015-03-06 03:31:33

标签: python datetime pandas

我的目标是在使用时间序列分析" as.freq"定义事件之前选择一行。比如Q' Q' (季度),' EOM'等...

例如,在下面的例子中,df.asfreq(' Q')产生以下结果:

import pandas as pd
import numpy as np 

dates = pd.date_range('20120101','20140101')
df =pd.DataFrame(np.random.randn(len(dates),1),index=dates,columns=list('A')) 

df.asfreq('Q')

df
            A
2012-03-31  0.207220
2012-06-30  1.154098
2012-09-30  0.928301
2012-12-31  0.457587
2013-03-31  1.063016
2013-06-30  -0.650549
2013-09-30  0.562216
2013-12-31  -1.978959

想要选择行"之前"到上一季度(以及之后的' Q')事件(2012-03-31)上面:

2012-03-30  0.314567

或者,行说明2012-03-30至2012-03-27,三行"之前"到上一季度的第一季度结束时(2012-03-31)。

大熊猫的新手,尝试过几件事情并且暂时难倒。

编辑:

尝试:

df.loc[df.index == df.asfreq('Q')][-3]

TypeError: <class 'pandas.core.frame.DataFrame'> type object 

1 个答案:

答案 0 :(得分:1)

基本语法是:

dataframe.loc[dataframe.index < 'date time value'][-n:]

n 是后续或前一行的数量。

例如:

In [49]: df.loc[df.index < '2012-03-31 00:00:00'][-3:]
Out[49]: 
                   A
2012-03-28 -0.252526
2012-03-29 -0.708683
2012-03-30 -0.056674

您可以使用更多运营商执行更复杂的操作:

In [11]: df.loc[(df.index > '2012-03-31 00:00:00') & (df.index < '2012-06-30 00:00:00')].head()
Out[11]: 
                   A
2012-04-01 -0.172987
2012-04-02 -0.676806
2012-04-03 -1.320243
2012-04-04 -0.222272
2012-04-05  0.700445

请注意,当您使用DatetimeIndex课程时,这实际上只考虑了这种特定情况。

使用df.asfreq(&#39; Q&#39;)的示例:

In [16]: df.loc[(df.index < df.asfreq('Q').index[0])][-3:]
Out[16]: 
                   A
2012-03-28 -1.387065
2012-03-29  1.203649
2012-03-30 -0.668392