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