从Python中的数据框中的timestamp列计算唯一的工作日

时间:2017-08-28 17:46:10

标签: python pandas series

我想计算时间戳中存在多少个独特的工作日。这是一个输入,我希望输出为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 个答案:

答案 0 :(得分:3)

一种方法是pandas series.dt.weekday

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

它返回4

如果需要捕获日期

,可以使用布尔索引
netcmd /?

答案 1 :(得分: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]之前转换为np.unique dtype:

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

答案 2 :(得分:1)

使用pd.to_datetime转换为日期时间,获取唯一的dayofweek列表,并计算所有低于5的人。

out = (df.captureTime.apply(pd.to_datetime).dt.dayofweek.unique() < 5).sum()
print(out)

4

df.unique删除重复项,为您留下daysofweek的唯一数组,其中50 - 4 - >工作日)下的计数出现次数。

df.dayofweek的输出:

out = df.captureTime.apply(pd.to_datetime).dt.dayofweek
print(out)

0    1
1    2
2    3
3    4
4    5
5    6
Name: captureTime, dtype: int64

答案 3 :(得分:1)

假设你有captureTime作为datetime对象,你可以这样做,

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