Как отфильтровать фрейм данных для получения одного вхождения в день в указанное время c - PullRequest
3 голосов
/ 04 апреля 2020

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

123412,2020-03-26 12:00,
123412,2020-03-27 12:00,
123412,2020-03-27 09:00,
123412,2020-03-27 09:00,
123412,2020-03-27 15:00,
123412,2020-03-26 15:00,
123412,2020-03-27 11:00,
123412,2020-03-27 12:00,

Пример не упорядочен, но, как я уже сказал, есть одна запись на каждый час дня.

Я хочу отфильтровать эти данные: Например, взять datetime 2020-03-26 12:00. Затем фильтр вернет следующие строки:

  • 2020-03-26 12: 00
  • 2020-03-25 12: 00
  • 2020-03 -24 12: 00

и др. c.

Я пробовал Grouper как этот df2 = df2.groupby(pd.Grouper(key=DATETIME, freq='D')), но это не сработало.

Как мне это сделать? 1025 *? Спасибо

1 Ответ

6 голосов
/ 04 апреля 2020

Вы можете отфильтровать дату и время по разам по boolean indexing и Series.dt.time:

print (df)
        a                date   b
0  123412 2020-03-26 12:00:00 NaN
1  123412 2020-03-27 12:00:00 NaN
2  123412 2020-03-27 09:00:00 NaN
3  123412 2020-03-27 09:00:00 NaN
4  123412 2020-03-27 15:00:00 NaN
5  123412 2020-03-26 15:00:00 NaN
6  123412 2020-03-27 11:00:00 NaN
7  123412 2020-03-27 12:00:00 NaN

d = '2020-03-26 12:00'

df = df[df['date'].dt.time.eq(pd.Timestamp(d).time())]
print (df)
        a                date   b
0  123412 2020-03-26 12:00:00 NaN
1  123412 2020-03-27 12:00:00 NaN
7  123412 2020-03-27 12:00:00 NaN

Если хотите только уникальные даты:

d = '2020-03-26 12:00'

df = df.drop_duplicates('date')
df = df[df['date'].dt.time.eq(pd.Timestamp(d).time())]
print (df)
        a                date   b
0  123412 2020-03-26 12:00:00 NaN
1  123412 2020-03-27 12:00:00 NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...