Найти пробелы в Pandas кадре данных - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть Dataframe, в котором есть столбец для минут и коррелированное значение, частота составляет около 79 секунд, но иногда отсутствуют данные за период (вообще нет строк). Я хочу определить, есть ли разрыв в 25 или более минут, и удалить набор данных, если это так. Как мне проверить, есть ли пробел?

Фрейм данных выглядит следующим образом:

INDEX    minutes     data                                              
0        23.000      1.456
1        24.185      1.223
2        27.250      0.931
3        55.700      2.513
4        56.790      1.446
...      ...         ...

Таким образом, существует нерегулярный, но короткий промежуток, который превышает 25 минут. В этом случае я хочу, чтобы набор данных был пустым:

Я новичок в Python, особенно в Pandas, поэтому объяснение будет полезно изучить.

1 Ответ

1 голос
/ 09 апреля 2020

Вы можете использовать numpy.roll для создания столбца со смещенными значениями (т. Е. Первое значение из исходного столбца становится вторым значением, второе становится третьим и т. Д. c):

import pandas as pd
import numpy as np

df = pd.DataFrame({'minutes': [23.000, 24.185, 27.250, 55.700, 56.790]})

np.roll(df['minutes'], 1)                                                   
# output: array([56.79 , 23.   , 24.185, 27.25 , 55.7  ])

Добавьте это как новый столбец к вашему фрейму данных и вычтите исходный столбец с новым столбцом.

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

Затем мы просто спрашиваем, находится ли какое-либо из значений, полученных в результате вычитания, выше вашего порога:

df['rolled_minutes'] = np.roll(df['minutes'], 1)
dropped_df = df.drop(index=0)
diff = dropped_df['minutes'] - dropped_df['rolled_minutes']
(diff > 25).any()
# output: True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...