2015-04-23 59 views
9

比方說,我有以下幾點:前,在大熊貓一定的指標值後獲得的行數

In [1]: import pandas as pd 
     import numpy as np 
     df = pd.DataFrame(data=np.random.rand(11),index=pd.date_range('2015-04-20','2015-04-30'),columns=['A']) 
Out[1]: 
       A 
2015-04-20 0.694983 
2015-04-21 0.393851 
2015-04-22 0.690138 
2015-04-23 0.674222 
2015-04-24 0.763175 
2015-04-25 0.761917 
2015-04-26 0.999274 
2015-04-27 0.907871 
2015-04-28 0.464818 
2015-04-29 0.005733 
2015-04-30 0.806351 

我有一個標識單個指數爲有趣一些複雜的方法,例如「2015-04 -25' 。

In [2]: df.loc['2015-04-25'] 
Out[2]: 
A 0.761917 
Name: 2015-04-25 00:00:00, dtype: float64 

什麼是之前和/或索引值後獲得數n行的最好的方式:我可以使用檢索與該指數的行?

我想什麼做的是一樣的東西:

In[3]: df.getRowsBeforeLoc('2015-04-25',3) 
Out[3]: 
2015-04-22 0.690138 
2015-04-23 0.674222 
2015-04-24 0.763175 
2015-04-25 0.761917 

或等價:

In[3]: df.getRowsAfterLoc('2015-04-25',3) 
Out[3]: 
2015-04-25 0.761917 
2015-04-26 0.999274 
2015-04-27 0.907871 
2015-04-28 0.464818 

(我沒有對應於該行是否沒有強烈的意見包括目標索引值本身)

回答

9

loc支持切片的起始/終點包括在該範圍內:

In [363]: 

df.loc[:'2015-04-25'] 
Out[363]: 
        A 
2015-04-25 0.141787 
2015-04-26 0.598237 
2015-04-27 0.106461 
2015-04-28 0.297159 
2015-04-29 0.058392 
2015-04-30 0.621325 
In [364]: 

df.loc['2015-04-25':] 
Out[364]: 
        A 
2015-04-25 0.141787 
2015-04-26 0.598237 
2015-04-27 0.106461 
2015-04-28 0.297159 
2015-04-29 0.058392 
2015-04-30 0.621325 

要獲得任何的姓氏/(N)行使用head/tail

In [378]: 

df.loc[:'2015-04-25'].head(3) 
Out[378]: 
        A 
2015-04-20 0.827699 
2015-04-21 0.901140 
2015-04-22 0.427304 

In [377]: 

df.loc[:'2015-04-25'].tail(3) 
Out[377]: 
        A 
2015-04-23 0.002189 
2015-04-24 0.041965 
2015-04-25 0.141787 

更新

之前獲得的行/ A specifc值後,我們可以在使用get_loc索引返回一個整數位置,然後用iloc獲取上一行/下一行:

In [388]: 

df.index.get_loc('2015-04-25') 
Out[388]: 
5 
In [391]: 

df.iloc[df.index.get_loc('2015-04-25')-1] 
Out[391]: 
A 0.041965 
Name: 2015-04-24 00:00:00, dtype: float64 
In [392]: 

df.iloc[df.index.get_loc('2015-04-25')+1] 
Out[392]: 
A 0.598237 
Name: 2015-04-26 00:00:00, dtype: float64 
+0

不錯,簡單!爲了只獲得有限數量的值,我只能這樣做: df.loc [:'2015-04-25']。tail(3) – jkokorian

+0

是的,這是正確的,看到更新的答案 – EdChum

+0

還有一個相關的問題,你也許能夠回答:您如何在目標索引之前或之後獲得單行(或索引)?那麼排除目標本身? – jkokorian