如何获得满足特定条件的行熊猫

时间:2021-06-22 12:19:30

标签: python pandas

 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}}

.

我怎样才能做到这一点?

2 个答案:

答案 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