удалить данные из df с конкретным списком времени - PullRequest
0 голосов
/ 28 апреля 2019

У меня есть пользователи dataframe с некоторыми «плохими» строками для GroupBy, ключ в этом dataframe - id. Я знаю, что я должен отбросить эти строки.

У меня есть этот список:

period = pd.DatetimeIndex(start='00:00:00',end='23:50:00',freq='120min').strftime('%H:%M:%S')

  Index(['00:00:00', '02:00:00', '04:00:00', '06:00:00', '08:00:00', '10:00:00',
       '12:00:00', '14:00:00', '16:00:00', '18:00:00', '20:00:00', '22:00:00'],
      dtype='object')

Mydata is:
                id      timestamp             counts
    0             1  2013-01-07 00:10:00            1
    1             1  2013-01-07 00:30:00            1
    2             1  2013-01-07 00:40:00            1
    3             1  2013-01-07 00:50:00            1
    4             1  2013-01-07 01:00:00            6
    5             1  2013-01-07 01:10:00            4
    6             1  2013-01-07 01:20:00            4
    7             1  2013-01-07 01:30:00           11
    8             1  2013-01-07 01:40:00           13
    9             1  2013-01-07 01:50:00           11
    10            1  2013-01-07 02:00:00           13
    11            1  2013-01-07 02:10:00           13
    12            1  2013-01-07 02:20:00           15
    13            1  2013-01-07 02:30:00           21
    14            1  2013-01-07 02:40:00           13
    15            1  2013-01-07 02:50:00           20
    16            1  2013-01-07 03:00:00           22
    17            1  2013-01-07 03:10:00           19
    18            1  2013-01-07 03:20:00           15
    19            1  2013-01-07 03:30:00           23
    20            1  2013-01-07 03:40:00           12
    21            1  2013-01-07 03:50:00           10
    22            1  2013-01-07 04:00:00           17
    23            1  2013-01-07 04:10:00           12
    24            1  2013-01-07 04:20:00           19
    25            1  2013-01-07 04:30:00           15
    26            1  2013-01-07 04:40:00           19
    27            1  2013-01-07 04:50:00           12
    28            1  2013-01-07 05:00:00           21
    29            1  2013-01-07 05:10:00           22

И я хотел бы удалить все строки, которых нет в списке. Мой текущий код следующий, но он дает мне пустой результат:

df = df.drop(df[~df.timestamp.apply(lambda x: x.time()).isin(date_rng)].index.tolist())

1 Ответ

0 голосов
/ 28 апреля 2019

drop для меток индекса, но вы можете просто использовать логическое индексирование:

df.loc[~df['timestamp'].isin(period)]

Примечания:

  1. Не уверен, откуда взято df.date_time, я предположил, что это столбец timestamp в Mydata.
  2. Убедитесь, что df['timestamp'] и periods имеют одинаковые dtype. Я не думаю, что вам нужно .strftime('%H:%M:%S'), возможно, лучше преобразовать столбец timestamp в datetime64[ns] (если это еще не дата / время).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...