Фильтр по максимальному доступному времени в день кадра данных Pandas меньше определенного предела - PullRequest
0 голосов
/ 06 сентября 2018

Для этого фрейма данных Python Pandas мне бы хотелось, чтобы эта строка дня имела самое большое время, меньшее 14h00:

import pandas as pd

import datetime
import numpy as np

df = pd.DataFrame({"a": ["31.12.1997 23:59:12",
                         "31.12.1998 12:59:12",
                         "31.12.1999 11:59:13",
                         "31.12.1999 12:59:13",
                         "31.12.1999 23:59:14"],
                   "b": [2,3,4, 5, 6]})
df["date"]=pd.to_datetime(df.a)
df["day"]=df.date.dt.date

Так что результат будет:

                     a  b                date         day
1  31.12.1998 12:59:12  3 1998-12-31 12:59:12  1998-12-31
3  31.12.1999 12:59:13  5 1999-12-31 12:59:13  1999-12-31

Поскольку реальный DataFrame довольно большой, было бы неплохо иметь высокую производительность.

1 Ответ

0 голосов
/ 06 сентября 2018

Используйте

In [8]: df.loc[df[df.date.dt.hour.le(14)].groupby('day')['date'].idxmax()]
Out[8]:
                     a  b                date         day
1  31.12.1998 12:59:12  3 1998-12-31 12:59:12  1998-12-31
3  31.12.1999 12:59:13  5 1999-12-31 12:59:13  1999-12-31

Подробнее

In [9]: df.date.dt.hour.le(14)
Out[9]:
0    False
1     True
2     True
3     True
4    False
Name: date, dtype: bool

In [10]: df[df.date.dt.hour.le(14)]
Out[10]:
                     a  b                date         day
1  31.12.1998 12:59:12  3 1998-12-31 12:59:12  1998-12-31
2  31.12.1999 11:59:13  4 1999-12-31 11:59:13  1999-12-31
3  31.12.1999 12:59:13  5 1999-12-31 12:59:13  1999-12-31

In [11]: df[df.date.dt.hour.le(14)].groupby('day')['date'].idxmax()
Out[11]:
day
1998-12-31    1
1999-12-31    3
Name: date, dtype: int64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...