如何在DataFrame中的索引行之前选择n行?

时间:2019-03-30 16:01:41

标签: python pandas dataframe

我有一个DataFrame,正在尝试选择一行(给定特定索引)和它前面的n行。

我尝试过类似的事情:

last_10 = self.market_data.iloc[index:-10]

但这似乎可以提供从index到数据帧末尾减去10行的所有内容。

我想要发生的是返回index指定的行及其前面的10行

3 个答案:

答案 0 :(得分:2)

使用此:

n = 10
last_10 = self.market_data.iloc[index-n:index+1]

切片数组时,Python会返回直到最后一个索引的所有内容,因此您需要添加一个以包含它。

答案 1 :(得分:1)

如果像DatetimeIndex这样的一般索引在val的位置上使用DataFrame.ilocIndex.get_loc

print (market_data)
            val
Date           
1900-01-01  2.0
1900-01-02  3.0
1900-01-03  5.1
1900-01-04  5.0
1900-01-05  6.0
1900-01-06  7.0
1900-01-07  3.0

n = 3
val = '1900-01-04'
pos = market_data.index.get_loc(val)
last_10 = market_data.iloc[pos-n+1:pos+1]
print (last_10)
            val
Date           
1900-01-02  3.0
1900-01-03  5.1
1900-01-04  5.0

如果RangeIndex-在索引4之前获得3个值,请使用DataFrame.loc

print (market_data)
         Date  val
0  1900-01-01  2.0
1  1900-01-02  3.0
2  1900-01-03  5.1
3  1900-01-04  5.0
4  1900-01-05  6.0
5  1900-01-06  7.0
6  1900-01-07  3.0

n = 3
val = 4
last_10 = market_data.loc[val-n+1:val]
print (last_10)
         Date  val
2  1900-01-03  5.1
3  1900-01-04  5.0
4  1900-01-05  6.0

答案 2 :(得分:0)

我认为最通用的方法是搜索索引,然后搜索上一次搜索的最后 10 个:

只是:

self.market_data.loc[:index].iloc[-10]

因为你的索引可能是一个时间戳。