pandas selecionar linhas com base em múltiplas colunas de data e hora

M_S_N:

Eu tenho duas colunas StartTimee EndTime, eu preciso selecionar eventos que ocorrem entre 7-9 e 18-20. O que eu tentei até agora é a seguinte:

+------------+--------------------------------+-------------------------------+
|            |                StartTime       |            EndTime            |
+------------+--------------------------------+-------------------------------+
|        25  | 2018-05-17 11:52:21.769491600  | 2018-05-17 23:08:35.731376400 |
|        32  | 2018-05-19 14:22:24.141359000  | 2018-05-19 18:37:04.003643800 |
|        42  | 2018-05-22 08:25:01.015975500  | 2018-05-22 22:32:34.249869500 |
|        43  | 2018-05-22 08:46:06.187427200  | 2018-05-22 21:29:17.397438000 |
|        44  | 2018-05-22 13:38:37.289871700  | 2018-05-22 18:38:36.498623500 |
+------------+--------------------------------+-------------------------------+

Extraí horas de dados usou para seguir calculam

df = df[((df['start_hr']<=7) & (df['end_hr']>=9)) | ((df['start_hr']<=18) & (df['end_hr']>=20))]

Existe uma alternativa mais rápida e precisa para isso?

Diego:

Irá aumentar o seu consumo de memória para um tempo, mas você pode fazer algo como este onde você cria duas colunas temporários e uso "df.query" sobre eles. Certifique-se de eliminar as colunas mais tarde.

df = df.assign(start_hr=df.start_hr.dt.hour, end_hr=df.end_hr.dt.hour)

df.query('(start_hr <= 7  and end_hr >=9) or (start_hr <= 18  and end_hr >=20) ')

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=347201&siteId=1
Recomendado
Clasificación