Я хотел бы посчитать, сколько уникальных дней недели существует в метке времени. Вот входные данные, и я хочу, чтобы выходные данные были равны 4 (поскольку 8/5 и 8/6 - выходные дни).

    captureTime
0   8/1/2017 0:05
1   8/2/2017 0:05
2   8/3/2017 0:05
3   8/4/2017 0:05
4   8/5/2017 0:05
5   8/6/2017 0:05
4
ejshin1 28 Авг 2017 в 20:46

3 ответа

Лучший ответ

Использование np.is_busday :

import numpy as np
import pandas as pd
df = pd.DataFrame( {
    'captureTime':[ '8/1/2017 0:05', '8/2/2017 0:05', '8/3/2017 0:05', 
                    '8/4/2017 0:05', '8/5/2017 0:05', '8/6/2017 0:05']})
df['captureTime'] = pd.to_datetime(df['captureTime'])

print(np.is_busday(df['captureTime'].values.astype('datetime64[D]')).sum())

Печать

4

Выше все рабочие дни считаются один раз. Если вы хотите считать одинаковые datetimes только один раз, вы можете использовать

np.is_busday(df['captureTime'].unique().astype('datetime64[D]')).sum()

Или, если вы хотите удалить datetime, которые имеют идентичные date компоненты, преобразуйте в datetime64[D] dtype перед вызовом np.unique:

np.is_busday(np.unique(df['captureTime'].values.astype('datetime64[D]'))).sum()
3
unutbu 28 Авг 2017 в 18:15

Один из способов - это серия панд.

df['captureTime'] = pd.to_datetime(df['captureTime'])
np.sum(df['captureTime'].dt.weekday.isin([0,1,2,3,4]))

Возвращает 4

Вы можете использовать логическое индексирование, если вам нужно захватить даты

df[df['captureTime'].dt.weekday.isin([0,1,2,3,4])]

    captureTime
0   2017-08-01 00:05:00
1   2017-08-02 00:05:00
2   2017-08-03 00:05:00
3   2017-08-04 00:05:00
3
Vaishali 28 Авг 2017 в 17:54

Предполагая, что у вас есть captureTime в качестве объекта datetime, вы можете сделать это,

s = df['captureTime'].dt.weekday s[s >= 5].count() # 5, 6 corresponds to saturday, sunday

1
CuriousGeek 28 Авг 2017 в 18:34