Как сравнить серию со скаляром - PullRequest
0 голосов
/ 08 февраля 2019

Я хочу сравнить цикл datetime64 [ns] pandas со скаляром из другой серии, также datetime64 [ns], в цикле.

Фрейм данных:

ds.info() <class 'pandas.core.frame.DataFrame'> Int64Index: 174764 entries, 0 to 185622 Data columns (total 2 columns): t1 174764 non-null datetime64[ns] t2 174764 non-null datetime64[ns]

Цикл:

import pandas as pd
import numpy as np

ds['t3'] = np.zeros(ds.shape[0])
for i in range(ds.shape[0]):
    r_i= ds['t1'].iat[i]
    ds['t3'].iat[i] = ds[(ds.t1.gt(r_1)) & (ds.t2.le(r_i))]['t1'].count()

На данный момент продолжительность составляет около 8 минут.Я бы хотел хотя бы половину времени.

1 Ответ

0 голосов
/ 08 февраля 2019

Преобразование значений в числовые массивы и подсчет только True значений по np.sum:

t1 = ds['t1'].values
t2 = ds['t2'].values
ds['t3'] = [np.sum((t1 > a) & (t2 < a)) for a, b in zip(t1, t2)]

Другая идея - требуется больше памяти:

t11 = t1[:, None]
ds['t3'] = np.sum((t1 > t11) & (t2 < t11), axis=1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...