name strike
INFY 1000
INFY 1020
INFY 1040
INFY 1060
INFY 1080
INFY 1100
INFY 1120
INFY 1140
INFY 1160
INFY 1180
INFY 1200
INFY 1220
我有一个包含列名和罢工的数据框,
对于查询 ltp = 1065
我想返回包含 6 行的数据帧
其中三行的值大于 ltp
,三行的值将大于 ltp
值低于 INFY 1020
INFY 1040
INFY 1060
INFY 1080
INFY 1100
INFY 1120
在这种情况下
{{1}}
.
我怎样才能做到这一点?
答案 0 :(得分:0)
你需要玩弄索引。
首先,创建一个空数据框:results = pd.Dataframe()
然后for index in df.iterrows():
然后如果达到条件 (x > 1065),要求追加
df.loc[:,index-3], df.loc[:,index-2], df.loc[:,index-1],df.loc[:,index],df.loc[:,index+1], df.loc[:,index+2]
答案 1 :(得分:0)
输入数据:
>>> df
name strike # ltp > strike
0 INFY 1000 # False
1 INFY 1020 # False <-|
2 INFY 1040 # False <-|
3 INFY 1060 # False <-|
4 INFY 1080 # True <- this is the breakpoint, idx=4 <-|
5 INFY 1100 # True <-|
6 INFY 1120 # True <-|
7 INFY 1140 # True
8 INFY 1160 # True
9 INFY 1180 # True
10 INFY 1200 # True
11 INFY 1220 # True
用 argmin
找到断点,得到下面 3 项和上面 3 项,包括断点:
>>> idx = df['strike'].lt(ltp).argmin()
>>> out = df['strike'].iloc[max(idx-3, 0):min(idx+3, len(df))]
输出结果:
>>> out
1 1020
2 1040
3 1060
4 1080
5 1100
6 1120
Name: strike, dtype: int64