将列表中的元素(日期时间)汇总为一个值
我想把一个列表里的元素连接起来。
比如说:
l=[0,1,2,3,4,5,6,7,8,9]
我想得到:
l_concatenated=45
我的代码是:
from datetime import *
data=[[datetime.datetime(2012, 8, 19, 15, 28, 2, 810000), 159],
[datetime.datetime(2012, 8, 19, 15, 28, 2, 811000), 159],
[datetime.datetime(2012, 8, 19, 15, 28, 3, 108000), 159],
[datetime.datetime(2012, 8, 19, 15, 28, 3, 108000), 159],
[datetime.datetime(2012, 8, 19, 15, 28, 3, 182000), 159],
[datetime.datetime(2012, 8, 19, 15, 28, 3, 182000), 159],
[datetime.datetime(2012, 8, 19, 15, 28, 3, 326000), 159],
[datetime.datetime(2012, 8, 19, 15, 28, 3, 326000), 159]]
date=[i[0] for i in data]
interval=[b-a for a,b in zip(date[:-1],date[1:])]
sorted_interval=[item for item in interval if item!=timedelta(0)]
# It doesn't function and just give wrong information
interval_concatenated=[ko[i]+ko[i+1] for i in range(len(sorted_interval)-1)]
补充一下:我需要计算两个日期之间的平均间隔。通过 interval=[b-a for a,b in zip(date[:-1],date[1:])]
这段代码,我可以得到两个连续值之间的间隔。
举个例子:它可能看起来像 interval=[timedelta(0, 0, 297000),timedelta(0, 0, 297000),timedelta(0, 0, 123000),timedelta(0, 1, 300000)]
,我想要计算这个间隔的平均值。
2 个回答
0
我想你是在找这个:
import datetime
import time
data=[[datetime.datetime(2012, 8, 19, 15, 28, 2, 810000), 159],
[datetime.datetime(2012, 8, 19, 15, 28, 2, 811000), 159],
[datetime.datetime(2012, 8, 19, 15, 28, 3, 108000), 159],
[datetime.datetime(2012, 8, 19, 15, 28, 3, 108000), 159],
[datetime.datetime(2012, 8, 19, 15, 28, 3, 182000), 159],
[datetime.datetime(2012, 8, 19, 15, 28, 3, 182000), 159],
[datetime.datetime(2012, 8, 19, 15, 28, 3, 326000), 159],
[datetime.datetime(2012, 8, 19, 15, 28, 3, 326000), 159]]
date = [time.mktime(i[0].timetuple()) for i in data]
average = datetime.datetime.fromtimestamp(sum(date)/len(date))
首先,把日期时间对象转换成Posix时间,然后计算平均值,最后再把它转换回来。
3
首先,你可以通过使用 zip
来计算连续日期之间的时间间隔:
intervals = [d2[0] - d1[0] for (d1, d2) in zip(data, data[1:])]
接着,计算总的 timedelta
(时间差):
total_interval = sum(intervals, timedelta(0, 0, 0))
最后,算出平均值:
average_interval = total_interval / len(intervals)