在pandas中索引开始后获取分钟列

时间:2015-07-31 13:50:07

标签: python datetime pandas

我有一个像这样的pandas数据框:

                     Ask Price   Ask Yld
DateTime
2010-03-10 13:00:00   4.031992  0.152202
2010-03-10 13:01:00   4.032859  0.152091
2010-03-10 13:02:00   4.033910  0.151957
2010-03-10 13:03:00   4.034197  0.151920
2010-03-10 13:04:00   4.035106  0.151803
2010-03-11 13:00:00   4.033333  0.166666

并且有一个跨越多天的日期时间索引。

我想创建一个列,其中包含该行的第一个索引之后的分钟数,即创建如下所示的输出:

                     Ask Price   Ask Yld  Minutes after start
DateTime
2010-03-10 13:00:00   4.031992  0.152202  0
2010-03-10 13:01:00   4.032859  0.152091  1
2010-03-10 13:02:00   4.033910  0.151957  2
2010-03-10 13:03:00   4.034197  0.151920  3
2010-03-10 13:05:00   4.035106  0.151803  5
2010-03-11 13:00:00   4.033333  0.166666  1440

我知道我可以简单地使用一个日期时间减去另一个来查找timedelta - 但我不知道如何应用它来创建一个新列。

1 个答案:

答案 0 :(得分:2)

您可以执行减法来获取TimeDeltaIndex,它具有.seconds属性,您可以将其除以60得到分钟:

In [220]:
df['Minutes after start'] = (df.index - df.index[0]).seconds/60
df

Out[220]:
                     Ask Price   Ask Yld  Minutes after start
DateTime                                                     
2010-03-10 13:00:00   4.031992  0.152202                    0
2010-03-10 13:01:00   4.032859  0.152091                    1
2010-03-10 13:02:00   4.033910  0.151957                    2
2010-03-10 13:03:00   4.034197  0.151920                    3
2010-03-10 13:04:00   4.035106  0.151803                    4

修改

您可以将timedeltaindex转换为timedelta64[s]

In [237]:
df['Minutes after start'] = (df.index - df.index[0]).astype('timedelta64[s]')/60
df

Out[237]:
                     Ask Price   Ask Yld  Minutes after start
DateTime                                                     
2010-03-10 13:00:00   4.031992  0.152202                    0
2010-03-10 13:01:00   4.032859  0.152091                    1
2010-03-10 13:02:00   4.033910  0.151957                    2
2010-03-10 13:03:00   4.034197  0.151920                    3
2010-03-10 13:04:00   4.035106  0.151803                    4

这相当于总秒数