Python 获取中索引开始后的分钟数列

Python 获取中索引开始后的分钟数列,python,datetime,pandas,Python,Datetime,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:0

我有一个熊猫数据框,看起来像这样:

                     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
并且有一个跨越许多天的datetime索引

我想创建一列,其中包含该行的第一个索引之后的时间量(以分钟为单位),即创建如下所示的输出:

                     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

我知道我可以简单地用一个datetime减去另一个来计算timedelta,但我不知道如何应用它来创建一个新列。

您可以执行减法来获得TimeDeltaIndex,它有一个属性,您可以将其除以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

这应等于总秒数

但仅在第一个索引值之后的一天内有效-即,一旦第二天达到13:00:00,则之后的分钟数再次重置为0。查看已编辑更新的问题。使用.total_seconds()而不是.seconds()似乎可行?虽然我得到了错误
AttributeError:'TimedeltaIndex'对象没有属性“total_seconds”
当尝试使用total_seconds()而不是seconds时…是
total_seconds
是我要更新的内容,我必须转换为py_timedeltaI。我期待您的更新,因为我不知道如何使用
total_seconds
,否则它会抛出该属性错误。