Фильтрация одного дня из кадра данных панд - PullRequest
3 голосов
/ 04 октября 2019

Пытаясь отфильтровать один день от моих данных, когда я пытаюсь выполнить свой код, я не получаю результатов (что не является точным, потому что есть данные за этот конкретный день).

Это кодЯ использую:

a['datetime'] = pd.to_datetime(a['datetime'])
start_date = pd.to_datetime('2019-09-01')
end_date = pd.to_datetime('2019-10-01')
sept = a[a['datetime'].between(start_date, end_date)]
day1 = pd.to_datetime('2019-09-11')
(sept['datetime'] == day1).sum()

Вот пример моих данных

3         2019-09-11 06:59:02.715641
13        2019-09-12 11:16:53.061871
24        2019-09-02 06:50:37.347313
27034     2019-09-15 11:57:34.582988
27163     2019-09-01 13:38:34.169917
31708     2019-09-17 07:45:50.693893
32883     2019-09-06 13:27:56.161920
33645     2019-09-17 10:02:11.010567
33657     2019-09-01 15:55:42.492608
57825     2019-09-17 11:25:19.405100
57836     2019-09-04 20:12:10.853341
57837     2019-09-04 20:12:00.959338

Ответы [ 2 ]

1 голос
/ 04 октября 2019

Вы можете использовать .loc для фильтрации нужной строки и суммирования соответствующего столбца.

, поскольку вы не указали нам имя своего столбца, я буду считать, что они col_1 и col_2

, поэтому для доступа к строке мы можем сделать:

print(df.loc[df['col_2'].dt.normalize() == '2019-09-11'])


col_1 col_2
3     2019-09-11 06:59:02.715641

затем, чтобы получить доступ к соответствующему столбцу для получения суммы, мы можем передать 'col_1' в конец с помощью .sum()

df.loc[df['col_2'].dt.normalize() == '2019-09-11']['col_1'].sum()
out : 3

dt.normalize(), который возвращает только значение даты вашего столбца datetimeпричина, по которой ваш код не будет работать, потому что 01-01-2001 не является == - 01-01-2001 23:59

, если мы напечатаем следующее:

print(df['col_2'].dt.normalize())
0    2019-09-11
1    2019-09-12
2    2019-09-02
3    2019-09-15
4    2019-09-01
5    2019-09-17
6    2019-09-06
7    2019-09-17
8    2019-09-01
9    2019-09-17
10   2019-09-04
11   2019-09-04
Name: 1, dtype: datetime64[ns]

обратите внимание, что dt.normalize() сохраняеттип данных datetime, поэтому вы можете использовать дополнительные операции datetime.

0 голосов
/ 04 октября 2019

Когда вы указываете sept['datetime'] == day1, вы сравниваете Timestamp с учетом времени. Таким образом, вы не проверяете, есть ли у вас данные за 11 сентября, вы проверяете, есть ли у вас данные за 11 сентября ровно в полночь.

Вы можете использовать функцию .between, как вы делали выше

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...