首页 > 解决方案 > 从日期时间中减去分钟 - python

问题描述

我有一个由两列组成的数据框:

查看数据框:

vehicles_stats[['_time','elapsed']].head()

输出:

    _time                               elapsed
0   2020-10-28 21:06:39.797000+01:00    26
1   2020-10-28 16:12:38.357000+01:00    16
2   2020-10-28 19:16:38.737000+01:00    11
3   2020-10-29 11:58:43.122000+01:00    16
4   2020-10-28 20:38:39.294000+01:00    16

如何更改“经过”列的类型以使其代表分钟?然后,我需要从每条记录的 _time 值中减去这些分钟。

任何建议表示赞赏

标签: pythonpandas

解决方案


使用to_datetimewithto_timedelta和减去 by Series.sub

df['new'] = pd.to_datetime(df['_time']).sub(pd.to_timedelta(df['elapsed'], unit='min'))
print (df)
                              _time  elapsed                     new
0  2020-10-28 21:06:39.797000+01:00       26 2020-10-28 19:40:39.797
1  2020-10-28 16:12:38.357000+01:00       16 2020-10-28 14:56:38.357
2  2020-10-28 19:16:38.737000+01:00       11 2020-10-28 18:05:38.737
3  2020-10-29 11:58:43.122000+01:00       16 2020-10-29 10:42:43.122
4  2020-10-28 20:38:39.294000+01:00       16 2020-10-28 19:22:39.294

如果需要将列从分钟转换为 timedeltas:

df['elapsed'] = pd.to_timedelta(df['elapsed'], unit='min')
df['new'] = pd.to_datetime(df['_time']).sub(df['elapsed'])
print (df)
                              _time         elapsed                     new
0  2020-10-28 21:06:39.797000+01:00 0 days 00:26:00 2020-10-28 19:40:39.797
1  2020-10-28 16:12:38.357000+01:00 0 days 00:16:00 2020-10-28 14:56:38.357
2  2020-10-28 19:16:38.737000+01:00 0 days 00:11:00 2020-10-28 18:05:38.737
3  2020-10-29 11:58:43.122000+01:00 0 days 00:16:00 2020-10-29 10:42:43.122
4  2020-10-28 20:38:39.294000+01:00 0 days 00:16:00 2020-10-28 19:22:39.294

推荐阅读