Синтаксис для выбора предыдущей строки в пандах после фильтрации - PullRequest
0 голосов
/ 26 июня 2018

У меня есть pd.DataFrame с 5 строками, скажем:

Row    Value
 1      32
 2      25
 3      10
 4      18
 5      21

Допустим, я использую фильтр pd [pd ['Value'] <15], и это должно вернуть </p>

Row    Value
 3      10

Мой вопрос: я хочу получить доступ к значению строки, прежде чем этот фильтр вернет True, в этом примере я хочу, чтобы функция возвращала значение 25 (из строки 2).

Моя конечная цель - применить условие, получить строку выше и проверить эту строку на наличие дополнительного условия.

Какие функции панд я могу использовать?

Спасибо!

Ответы [ 4 ]

0 голосов
/ 26 июня 2018

Использование nonzero

df.iloc[(df['Value'] < 15).nonzero()[0]-1]
Out[34]: 
   Row  Value
1    2     25
0 голосов
/ 26 июня 2018

np.flatnonzero

Чтобы определить, где маска True, вычтите одну

df.iloc[np.flatnonzero(df.Value < 15) - 1]

   Row  Value
1    2     25
0 голосов
/ 26 июня 2018

Использование idxmax

>>> df.iloc[df.Value.le(15).idxmax() - 1]

Row       2
Value    25
0 голосов
/ 26 июня 2018

Сдвиньте маску вверх на 1.

df[(df['Value'] < 15).shift(-1).fillna(False)]

   Row  Value
1    2     25

В более общем случае, если вы пытаетесь найти все строки больше 15, чья следующая строка меньше 15, вы можете вычислить дваотдельные маски и И их:

df[(df['Value'].shift(-1) < 15) & (df['Value'] > 15)]

   Row  Value
1    2     25
...