0

我有一个时间戳列表,我想计算列表的平均值,但我需要忽略周六和周日的周末,并将周五和周一视为一天。我只想包括周一到周五的工作日。这是列表的一个示例。我以可读格式编写了时间戳,以便轻松跟踪该过程。例子:

['2011 年 2 月 17 日星期三 12:57:40','2011 年 2 月 8 日星期三 12:57:40','2011 年 1 月 25 日星期二 17:15:35']
MIN='2011 年 1 月 25 日星期二 17:15:35'

' Wed Feb 17 12:57:40 2011' ,因为我们在这个数字和 MIN 之间有 6 个周末天,所以我将这个数字移回 6 天。它将是 = 'Fri Feb 11 12:57:40 2011'。

'2011 年 2 月 8 日星期三 12:57:40',因为我们在这个数字和 MIN 之间有 4 个周末天,所以我将这个数字移回 4 天,它将是 '2011 年 2 月 4 日星期三 12:57:40'

新列表现在是 ['Fri Feb 11 12:57:40 2011','Wed Feb 4 12:57:40 2011','Tue Jan 25 17:15:35 2011]

MAX='2011 年 2 月 11 日星期五 12:57:40'

平均值=(2011 年 2 月 11 日星期五 12:57:40 + 2011 年 2 月 4 日星期三 12:57:40 + 2011 年 1 月 25 日星期二 17:15:35)/3

差异= MAX - 平均值

4

2 回答 2

0

编辑: [删除了以前有错误的代码;替换为下面的代码。]

下面是一些代码的输出,它挤出周末,计算平均值,然后将周末放回以获得明显有效的平均值。代码显示在一些测试用例的输出之后。

['Fri Jan 13 12:00:00 2012', 'Mon Jan 16 11:00:00 2012']
Average =  Fri Jan 13 23:30:00 2012
['Fri Jan 13 12:00:00 2012', 'Mon Jan 16 13:00:00 2012']
Average =  Mon Jan 16 00:30:00 2012
['Fri Jan 13 14:17:58 2012', 'Sat Jan 14 1:2:3 2012', 'Sun Jan 15 4:5:6 2012', 'Mon Jan 16 11:03:29 2012', 'Wed Jan 18 14:27:17 2012', 'Mon Jan 23 10:02:12 2012', 'Mon Jan 30 10:02:12 2012']
Average =  Thu Jan 19 16:46:37 2012
['Fri Jan 14 14:17:58 2011', 'Mon Jan 17 11:03:29 2011', 'Wed Jan 19 14:27:17 2011', 'Mon Jan 24 10:02:12 2011']
Average =  Wed Jan 19 00:27:44 2011

Python代码:

from time import strptime, mktime, localtime, asctime
from math import floor

def averageBusinessDay (dates):
    f = [mktime(strptime(x)) for x in dates]
    h = [x for x in f if localtime(x).tm_wday < 5]  # Get rid of weekend days
    bweek, cweek, dweek = 3600*24*5, 3600*24*7, 3600*24*2    
    e = localtime(h[0])  # Get struct_time for first item
    # fm is first Monday in local time
    fm = mktime((e.tm_year, e.tm_mon, e.tm_mday-e.tm_wday, 0,0,0,0,0,0))
    i = [x-fm for x in h]  # Subtract leading Monday
    j = [x-floor(x/cweek)*dweek for x in i]  # Squeeze out weekends
    avx = sum(j)/len(j)
    avt = asctime(localtime(avx+floor(avx/bweek)*dweek+fm))
    return avt

def atest(dates):
    print dates
    print 'Average = ', averageBusinessDay (dates)

atest(['Fri Jan 13 12:00:00 2012', 'Mon Jan 16 11:00:00 2012'])
atest(['Fri Jan 13 12:00:00 2012', 'Mon Jan 16 13:00:00 2012'])
atest(['Fri Jan 13 14:17:58 2012', 'Sat Jan 14 1:2:3 2012', 'Sun Jan 15 4:5:6 2012', 'Mon Jan 16 11:03:29 2012', 'Wed Jan 18 14:27:17 2012', 'Mon Jan 23 10:02:12 2012', 'Mon Jan 30 10:02:12 2012'])
atest(['Fri Jan 14 14:17:58 2011', 'Mon Jan 17 11:03:29 2011', 'Wed Jan 19 14:27:17 2011', 'Mon Jan 24 10:02:12 2011'])
于 2012-11-30T16:03:13.257 回答
-1

根据 ' ' 拆分字符串,取第一个元素,如果不是星期六或星期日,则为工作日。现在我需要知道日期列表的“平均值”是什么意思。

于 2012-11-30T15:14:43.460 回答