我的目标是在使用时间序列分析" 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
答案 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