Как снять дату с даты и времени в пандах - PullRequest
0 голосов
/ 09 октября 2019

Данные выглядят так:

     Id           Timestamp         Data    Group_Id    
0   5999    2018-01-01 00:00:05.523 125.5   101 
1   6000    2018-01-01 00:00:05.757 125.0   101 
2   6001    2018-01-02 00:00:13.507 127.0   52  
3   6002    2018-01-02 00:00:13.743 126.5   52  
4   6003    2018-01-03 00:00:15.407 125.5   50

В основном я хочу проверить / распечатать данные на определенную дату, скажем, 2018-01-02. Я знаю о striptime из datetime, но не уверен, что это лучший способ сделать это.

Ожидаемый результат выглядит следующим образом:

     Id           Timestamp         Data    Group_Id    
2   6001    2018-01-02 00:00:13.507 127.0   52  
3   6002    2018-01-02 00:00:13.743 126.5   52  

У меня есть 2 расширенных вопроса:

1) Как мы можем подсчитать, сколько строк в этом подмножестве 2018-01-02?

2) Можем ли мы добавить второе условие в Group_Id для фильтрации строк с Group_Id, равным 52 на дату 2018-01-02?

Ответы [ 2 ]

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

Используйте dt.strftime, затем получите все строки, которые равны вашей дате, с boolean indexing

m = df['Timestamp'].dt.strftime('%Y-%m-%d') == '2018-01-02'
df[m]

Или в одну строку:

df[df['Timestamp'].dt.strftime('%Y-%m-%d').eq('2018-01-02')]

Выход

     Id               Timestamp   Data  Group_Id
2  6001 2018-01-02 00:00:13.507  127.0        52
3  6002 2018-01-02 00:00:13.743  126.5        52

Мы также можем использовать set_index с .loc:

df.set_index('Timestamp').loc['2018-01-02'].reset_index()

Выход

                Timestamp    Id   Data  Group_Id
0 2018-01-02 00:00:13.507  6001  127.0        52
1 2018-01-02 00:00:13.743  6002  126.5        52

note : если ваш столбец Timestamp еще не datetime, используйте этот код перед выполнением вышеуказанного:

df['Timestamp'] = pd.to_datetime(df['Timestamp'])

Вопрос 1:

m = df['Timestamp'].dt.strftime('%Y-%m-%d') == '2018-01-02'
df[m].shape[0]

Или

len(df[m])

Вопрос 2:

m1 = df['Timestamp'].dt.strftime('%Y-%m-%d') == '2018-01-02'
m2 = df['Group_Id'].eq(52)

df[m1&m2]
1 голос
/ 09 октября 2019

Это даст ожидаемый результат:

df[df.Timestamp.dt.date == pd.to_datetime('2018-01-02')]

Чтобы ответить на ваши расширенные вопросы, добавление shape[0] в конце скажет вам, сколько строк в подмножестве.

df[df.Timestamp.dt.date == pd.to_datetime('2018-01-02')].shape[0]

Чтобы добавить несколько условий:

df[(df.Timestamp.dt.date == pd.to_datetime('2018-01-02')) & (df.Group_Id == 52)]

Предполагается, что Group_Id является целым, иначе:

df[(df.Timestamp.dt.date == pd.to_datetime('2018-01-02')) & (df.Group_Id == '52')]

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