python中两个时间戳的平均值

时间:2017-01-18 15:21:43

标签: python datetime pandas average

我有两个时间戳(pandas.tslib.Timestamp)ts1ts2,我想计算它们的平均值。

(ts1+ts2)/2

但是,我收到此错误:

TypeError: unsupported operand type(s) for +: 'Timestamp' and 'Timestamp'

感谢您的帮助。

5 个答案:

答案 0 :(得分:6)

从另一个时间戳中减去时间戳会生成一个间隔,然后可以将其划分。

如错误所示,不允许添加时间戳。

解决方案包括计算间隔,将间隔减半,然后将减半的间隔添加到较早的时间戳或从较晚的时间戳减去。

from pandas.tslib import Timestamp
d1 = Timestamp.now()
# wait a few seconds
d2 = Timestamp.now()
d3 = d1 + (d2 - d1) / 2
# d3 will be the timestamp exactly in between d1 & d2

答案 1 :(得分:5)

datetime.datetime对象类似的对象也不支持添加,因为添加日期没有意义。您应该使用datetime.timedelta来获取平均时间。

怎么样?这样:

average_delta = (ts2 - ts1) / 2
average_ts = ts1 + average_delta

答案 2 :(得分:2)

这就是我采用2个时间戳的中位数的方法:

ts1 = pd.Timestamp('2016-1-18 10:00')

ts2 = pd.Timestamp('2016-1-18 10:20')

ts1+(ts2-ts1)/2
Out[11]: Timestamp('2016-01-18 10:10:00')

无需测试ts2是否大于ts2,因为方程式是对称的。

答案 3 :(得分:2)

这种方法给出了与其他方法相同的结果:

t1 = Timestamp('2017-01-18 10:00:00.0000000')
t2 = Timestamp('2017-01-20 10:00:00.0000000')
average = Timestamp((t1.value + t2.value)/2.0)

答案 4 :(得分:1)

准备样本数据帧(平均需要2个或更多时间戳):

# Initiate dataframe
date_var = "date"
df = pd.DataFrame(data=[['A', '2018-08-05 17:06:01'],
                        ['A', '2018-08-05 17:06:02'],
                        ['A', '2018-08-05 17:06:03'],
                        ['B', '2018-08-05 17:06:07'],
                        ['B', '2018-08-05 17:06:09'],
                        ['B', '2018-08-05 17:06:11']],
                  columns=['column', date_var])

# Convert date-column to proper pandas Datetime-values/pd.Timestamps
df[date_var] = pd.to_datetime(df[date_var])

提取所需的平均时间戳值:

# Extract the numeric value associated to each timestamp (epoch time)
# NOTE: this is being accomplished via accessing the .value - attribute of each Timestamp in the column
In:
[tsp.value for tsp in df[date_var]]
Out:
[
    1533488761000000000, 1533488762000000000, 1533488763000000000,
    1533488767000000000, 1533488769000000000, 1533488771000000000
]

# Use this to calculate the mean, then convert the result back to a timestamp
In:
pd.Timestamp(np.nanmean([tsp.value for tsp in df[date_var]]))
Out:
Timestamp('2018-08-05 17:06:05.500000')