从日期时间中减去分钟数-python

时间:2020-10-29 14:14:55

标签: python pandas

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

  • _time-dtype:datatime64
  • 已过去-dtype:对象

查看数据框:

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值中减去这些分钟。

任何建议表示赞赏

1 个答案:

答案 0 :(得分:0)

to_datetimeto_timedelta一起使用,并减去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

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

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