首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >取两个日期时间值或列的中位数

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

Stack Overflow用户
提问于 2018-12-27 13:52:35
回答 1查看 677关注 0票数 1

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

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

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

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

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

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

EN

回答 1

Stack Overflow用户

发布于 2018-12-27 15:33:48

假设df如下所示:

代码语言:javascript
复制
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”

代码语言:javascript
复制
df[['time1','time2','time3']] = df[['time1','time2','time3']].apply(pd.to_datetime,errors='coerce')

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

代码语言:javascript
复制
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

或者简单地说:

代码语言:javascript
复制
df['avg'] = [(pd.to_datetime((df['time1'][i].value + df['time2'][i].value)/2.0)) for i in df.index]

查找column3和avg的差异:

代码语言:javascript
复制
(df.time3-df.avg).astype('timedelta64[m]')

输出:

代码语言:javascript
复制
0     0.0
1    25.0
dtype: float64

附注:您必须将列time1time2time3替换为数据框架中的列名。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53940340

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档