我有一个DataFrame
,正在尝试选择一行(给定特定索引)和它前面的n
行。
我尝试过类似的事情:
last_10 = self.market_data.iloc[index:-10]
但这似乎可以提供从index
到数据帧末尾减去10行的所有内容。
我想要发生的是返回index
指定的行及其前面的10行
答案 0 :(得分:2)
使用此:
n = 10
last_10 = self.market_data.iloc[index-n:index+1]
切片数组时,Python会返回直到最后一个索引的所有内容,因此您需要添加一个以包含它。
答案 1 :(得分:1)
如果像DatetimeIndex
这样的一般索引在val
的位置上使用DataFrame.iloc
和Index.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]
因为你的索引可能是一个时间戳。