取两个日期时间值或列的中位数

时间:2018-12-27 05:52:35

标签: python pandas datetime timestamp timedelta

对于下面的数据,我想取每行中前两个时间戳的中间值或中间时间,然后减去该第三个时间戳

I want to take the middle value of the first two timestamps and subract that by the third time stamp

获取两个时间戳的中位数或中间时间的最佳方法是什么?

期望的输出是以分钟为单位的两个时间戳之间的差。

它是前两个值的中位数或均值减去第三个时间戳的值。

它是2018-12-21 23:31:24.6152018-12-21 23:31:26.659的中间值或时间戳。

一旦有了该值,我想减去2018-12-21 23:31:27.975的第三个时间戳。输出将代表分钟的值。

2 个答案:

答案 0 :(得分:0)

如果只需要datetime列的中间值,则可以执行以下操作:

df['linked_trip_pickup_departed_time'].astype('datetime64[ns]').quantile(.5)
df['pickup_departed_time_utc'].astype('datetime64[ns]').quantile(.5)

这将为您提供每个日期时间列的median。现在,您可以减去它。

答案 1 :(得分:0)

假设df如下:

df = pd.DataFrame(data={'time1':['2018-12-21 23:31:24.615','2018-12-22 01:33:26.015'],'time2':['2018-12-21 23:31:26.659','2018-12-22 01:33:32.865'],'time3':['2018-12-21 23:31:27.975','2018-12-22 01:59:05.136']})

    time1                   time2                   time3
0   2018-12-21 23:31:24.615 2018-12-21 23:31:26.659 2018-12-21 23:31:27.975
1   2018-12-22 01:33:26.015 2018-12-22 01:33:32.865 2018-12-22 01:59:05.136

转换“ to_datetime”

df[['time1','time2','time3']] = df[['time1','time2','time3']].apply(pd.to_datetime,errors='coerce')

创建一个具有前两列平均值的列:

my_list= []
for i in df.index:
    my_list.append(pd.to_datetime((df['time1'][i].value + df['time2'][i].value)/2.0))
df['avg'] = my_list

或简单地:

df['avg'] = [(pd.to_datetime((df['time1'][i].value + df['time2'][i].value)/2.0)) for i in df.index]

第3列与平均值的区别:

(df.time3-df.avg).astype('timedelta64[m]')

输出:

0     0.0
1    25.0
dtype: float64

P.S:您必须用数据框中的列名称替换time1time2time3列。