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
,否则它会抛出该属性错误。