如何从Timestamp中减去timedelta,支持负回报

时间:2016-01-30 05:13:59

标签: python datetime pandas

我的数据框包含两列:timestamparrival_timeTimestamptimedelta类型:

        timestamp   arrival_time
0   2015-01-28 05:30:47 0 days 05:30:33.000000000
1   2015-01-28 05:31:50 0 days 05:31:00.000000000
2   2015-01-28 05:32:21 0 days 05:31:43.000000000
3   2015-01-28 05:32:53 0 days 05:31:43.000000000
4   2015-01-28 05:33:57 0 days 05:32:58.000000000
5   2015-01-28 05:34:28 0 days 05:33:39.000000000
6   2015-01-28 05:35:00 0 days 05:34:23.000000000
7   2015-01-28 05:35:31 0 days 05:34:23.000000000
8   2015-01-28 05:36:02 0 days 05:36:00.000000000
9   2015-01-28 05:36:34 0 days 05:36:00.000000000
10  2015-01-28 05:37:07 0 days 05:36:38.000000000
11  2015-01-28 05:37:38 0 days 05:36:38.000000000
12  2015-01-28 05:38:41 0 days 05:39:00.000000000
13  2015-01-28 05:39:13 0 days 05:39:00.000000000
14  2015-01-28 05:39:44 0 days 05:40:12.000000000

我想找到两者的平均差异。但是,简单的减法会导致行12等行出现问题:它会正确返回23:59:41。但我希望它返回一个负值(即-00:00:19)或类似的那样。

我应该完全将其类型从日期更改为整数还是有更好的解决方案?

编辑:当差异超过一天时,它再次变得怪异:

3694    2015-01-29 01:10:27 1 days 01:11:27

现在它返回

3694   -2 days +23:59:00

应该返回-00:01:00

1 个答案:

答案 0 :(得分:1)

根据评论编辑 如果我正确阅读,你基本上想知道每个时间戳中相对于一天开始的时差。我在这里设置了一个测试用例并提供了另一段代码。如果我们现在在同一页面,请告诉我。

In [123]: test_df
Out[123]:
            timestamp  arrival_time
0 2015-01-28 05:30:47      05:31:34

In [124]: test_df.dtypes
Out[124]:
timestamp        datetime64[ns]
arrival_time    timedelta64[ns]
dtype: object

In [125]: test_df['result'] = (test_df['timestamp'] - test_df['arrival_time']) - test_df['timestamp'].apply(pd.Timestamp.date).apply(pd.Timestamp)

In [126]: test_df
Out[126]:
            timestamp  arrival_time    result
0 2015-01-28 05:30:47      05:31:34 -00:00:47