дубликаты по разнице меток времени не работают - PullRequest
0 голосов
/ 30 апреля 2018

Я нашел этот пример . Мне нужно получить все строки, где в течение одной секунды следующий ряд будет иметь такую ​​же цену. Так что это та же проблема, что и на другой вопрос, но она не работает для меня.

Я использую Python 3.6.3 и Pandas версии 0.22.0

my df:

                    timestamp   price
    0  2018-04-29 13:14:43.026  6394.0
    1  2018-04-29 13:16:53.714  6378.0
    2  2018-04-29 13:17:01.324  6378.0
    3  2018-04-29 13:17:02.246  6384.0
    4  2018-04-29 13:17:07.413  6384.0
    5  2018-04-29 13:17:08.331  6380.0
    6  2018-04-29 13:17:11.437  6380.0
    7  2018-04-29 13:17:11.895  6377.0
    8  2018-04-29 13:17:13.449  6377.0
    9  2018-04-29 13:17:13.452  6379.0

    timestamp    datetime64[ns]
    price               float64
    dtype: object

Я пробую следующий код:

 data = df[(df.groupby(["price"], as_index=False)["timestamp"].diff().fillna(0).dt.seconds <= 1).reset_index(drop=True)]

и вот результат:

                    timestamp   price
    0 2018-04-29 13:14:43.026  6394.0
    1 2018-04-29 13:16:53.714  6378.0
    2 2018-04-29 13:17:01.324  6378.0
    4 2018-04-29 13:17:07.413  6384.0
    5 2018-04-29 13:17:08.331  6380.0
    7 2018-04-29 13:17:11.895  6377.0
    9 2018-04-29 13:17:13.452  6379.0

EDIT:

Выходные данные должны быть пустыми, но если мы создадим этот фрейм данных, т.е.

                    timestamp   price
    0  2018-04-29 13:14:43.026  6394.0
    1  2018-04-29 13:16:53.714  6378.0
    2  2018-04-29 13:17:01.324  6378.0
    3  2018-04-29 13:17:02.246  6378.0
    4  2018-04-29 13:17:07.413  6384.0
    5  2018-04-29 13:17:08.331  6380.0
    6  2018-04-29 13:17:11.437  6380.0
    7  2018-04-29 13:17:11.895  6377.0
    8  2018-04-29 13:17:13.449  6377.0
    9  2018-04-29 13:17:13.452  6377.0

должно вывести:

                    timestamp   price

    2  2018-04-29 13:17:01.324  6378.0
    3  2018-04-29 13:17:02.246  6378.0
    8  2018-04-29 13:17:13.449  6377.0
    9  2018-04-29 13:17:13.452  6377.0

1 Ответ

0 голосов
/ 30 апреля 2018

Если я не ошибаюсь, я думаю, что вы немного усложнили это, вам просто нужно взять diff:

df = pd.read_fwf(StringIO(
'''timestamp                price
2018-04-29 13:14:43.026  6394.0
2018-04-29 13:16:53.714  6378.0
2018-04-29 13:17:01.324  6378.0
2018-04-29 13:17:02.246  6378.0
2018-04-29 13:17:07.413  6384.0
2018-04-29 13:17:08.331  6380.0
2018-04-29 13:17:11.437  6380.0
2018-04-29 13:17:11.895  6377.0
2018-04-29 13:17:13.449  6377.0
2018-04-29 13:17:13.452  6379.0'''
), colspecs=[(0,23), (25, 31)], dtype={
    'timestamp': 'datetime64[ns]',
    'price': 'float'
})


diff = df.diff()
selection = (diff['timestamp'].dt.seconds <=1) & (diff['price'] == 0)
selection = selection | selection.shift(periods=-1)
print(df[selection])

выход

                timestamp   price
2 2018-04-29 13:17:01.324  6378.0
3 2018-04-29 13:17:02.246  6378.0
7 2018-04-29 13:17:11.895  6377.0
8 2018-04-29 13:17:13.449  6377.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...