Как получить все индексы, которые имели конкретное значение в последней строке Pandas DataFrame? - PullRequest
0 голосов
/ 18 мая 2018

Для примера типа DataFrame,

>>> import pandas as pd
>>> index = pd.date_range(start='1/1/2018', periods=6, freq='15T')
>>> data = ['ON_PEAK', 'OFF_PEAK', 'ON_PEAK', 'ON_PEAK', 'OFF_PEAK', 'OFF_PEAK']
>>> df = pd.DataFrame(data, index=index, columns=['tou'])
>>> df
                          tou
2018-01-01 00:00:00   ON PEAK
2018-01-01 00:15:00  OFF PEAK
2018-01-01 00:30:00   ON PEAK
2018-01-01 00:45:00   ON PEAK
2018-01-01 01:00:00  OFF PEAK
2018-01-01 01:15:00  OFF PEAK

Как получить все индексы, для которых значение tou не равно ON_PEAK, но строки перед ними - ON_PEAK, т.е. результат будет:

['2018-01-01 00:15:00', '2018-01-01 01:00:00']

Или, если проще получить все строки с ON_PEAK и первым рядом с ними, т.е.

['2018-01-01 00:00:00', '2018-01-01 00:15:00', '2018-01-01 00:30:00', '2018-01-01 00:45:00', '2018-01-01 01:00:00']

1 Ответ

0 голосов
/ 18 мая 2018

Вам нужно найти строки, где tou не равно ON_PEAK, а предыдущее tou найдено с помощью pandas.shift () равно ON_PEAK.Обратите внимание, что положительные значения в shift дают n-е предыдущие значения, а отрицательные значения дают n-е следующее значение в кадре данных.

df.loc[(df['tou']!='ON_PEAK') & (df['tou'].shift(1)=='ON_PEAK')]

Выход:

                       tou
2018-01-01 00:15:00 OFF_PEAK
2018-01-01 01:00:00 OFF_PEAK
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...