использовать метод значения для условия numpy, где - PullRequest
1 голос
/ 29 марта 2020

допустим, у вас есть этот фрейм данных:

 df = pd.DataFrame( data =    [ '2014-04-07 10:55:35.087000+00:00',
                               '2014-04-07 13:59:37.251500+00:00',
                               '2014-04-02 13:23:59.629000+00:00',
                               '2014-04-07 12:17:48.182000+00:00',
                               '2014-04-06 17:00:23.912000+00:00'],
                    columns = ['timestamp'],
                    dtype = np.datetime64
                    )

, и вы хотите создать новый столбец, значения которого равны 1, если отметка времени является днем ​​недели, или 0, если это не так. Тогда я бы запустил что-то вроде этого:

 df['weekday'] = df['timestamp'].apply(lambda x: 1 if x.weekday() < 5 else 0 )

Пока все хорошо. Тем не менее, в моем случае у меня есть около 10 миллионов строк с такими значениями меток времени, и для запуска требуется всего вечность. Итак, я искал варианты векторизации и нашел numpy.where(). Но, конечно, это не работает: np.where(df['timestamp'].weekday() < 5, 1, 0)

Итак, есть ли способ доступа к методу .weekday () временных меток при использовании numpy .where или есть какой-либо другой способ создать столбец дня недели, если в нем 10 миллионов строк? Спасибо.

1 Ответ

2 голосов
/ 29 марта 2020

Использование Series.dt.dayofweek / Series.dt.weekday с Series.lt и Series.astype:

df['weekday'] = df['timestamp'].dt.dayofweek.lt(5).astype(int)
print(df)
                   timestamp  weekday
0 2014-04-07 10:55:35.087000        1
1 2014-04-07 13:59:37.251500        1
2 2014-04-02 13:23:59.629000        1
3 2014-04-07 12:17:48.182000        1
4 2014-04-06 17:00:23.912000        0

Я рекомендую вам посмотреть: when should I ever want to use apply in my code

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

df['weekday'] = np.where(df['timestamp'].dt.dayofweek.lt(5), 1, 0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...