在python/pandas中,如何搜索最近的值?
我有一个这样的数组在python/pandas中,如何搜索最近的值?,python,numpy,pandas,Python,Numpy,Pandas,我有一个这样的数组 sp500=Quandl.get("YAHOO/INDEX_GSPC") Open High Low Close Volume Adjusted Close returns vols Date 1950-05-26 18.67 18.67 18.67 18.67 1330000 18.67 -0.001070 0.091246 19
sp500=Quandl.get("YAHOO/INDEX_GSPC")
Open High Low Close Volume Adjusted Close returns vols
Date
1950-05-26 18.67 18.67 18.67 18.67 1330000 18.67 -0.001070 0.091246
1950-05-29 18.72 18.72 18.72 18.72 1110000 18.72 0.002678 0.078494
1950-05-31 18.78 18.78 18.78 18.78 1530000 18.78 0.003205 0.073638
1950-06-01 18.77 18.77 18.77 18.77 1580000 18.77 -0.000532 0.069189
1950-06-02 18.79 18.79 18.79 18.79 1450000 18.79 0.001066 0.059300
在任何日期,我都想找出vol低于5%的天数。例如,在1950年5月26日,我将开始向后搜索,直到我找到一个小于5%的vol,并计算那天和1950年5月26日之间的日差。确切的功能是简单的“天”,因为这发生了
有没有更简单的方法
我想到的是使用np.where(x假设您的数据帧在索引中排序,您可以组合
numpy.where
和Series.fillna
,以获得低于某个阈值的卷的最后一天。例如,从
>>> df
vols
Date
2014-07-10 0.045
2014-07-11 0.057
2014-07-12 0.064
2014-07-13 0.003
2014-07-14 0.021
2014-07-15 0.052
2014-07-16 0.090
这将是
>>> df['tick'] = np.where(df.vols < .05, df.index, pd.tslib.NaT)
>>> df
vols tick
Date
2014-07-10 0.045 2014-07-10
2014-07-11 0.057 NaN
2014-07-12 0.064 NaN
2014-07-13 0.003 2014-07-13
2014-07-14 0.021 2014-07-14
2014-07-15 0.052 NaN
2014-07-16 0.090 NaN
请注意,您需要在最后一步中使用.values
,否则-
将执行某种设置差异操作
>>> df['tick'].fillna(method='ffill', inplace=True)
>>> df
vols tick
Date
2014-07-10 0.045 2014-07-10
2014-07-11 0.057 2014-07-10
2014-07-12 0.064 2014-07-10
2014-07-13 0.003 2014-07-13
2014-07-14 0.021 2014-07-14
2014-07-15 0.052 2014-07-14
2014-07-16 0.090 2014-07-14
>>> df['days'] = df.index.values - df['tick']
>>> df
vols tick days
Date
2014-07-10 0.045 2014-07-10 0 days
2014-07-11 0.057 2014-07-10 1 days
2014-07-12 0.064 2014-07-10 2 days
2014-07-13 0.003 2014-07-13 0 days
2014-07-14 0.021 2014-07-14 0 days
2014-07-15 0.052 2014-07-14 1 days
2014-07-16 0.090 2014-07-14 2 days