当前位置:  开发笔记 > 编程语言 > 正文

大熊猫持续时间的日期

如何解决《大熊猫持续时间的日期》经验,为你挑选了1个好方法。

我觉得这应该很容易完成,但我无法弄清楚如何.我有一个pandas DataFrame日期:

0    2012-08-21
1    2013-02-17
2    2013-02-18
3    2013-03-03
4    2013-03-04
Name: date, dtype: datetime64[ns]

我希望有一列持续时间,例如:

0    0
1    80 days
2    1 day
3    15 days
4    1 day
Name: date, dtype: datetime64[ns]

我的尝试产生了大量的0天NaT而是:

>>> df.date[1:] - df.date[:-1]
0       NaT
1    0 days
2    0 days
...

有任何想法吗?



1> Stefan..:

Timedeltas在这里很有用:( 见文档)

从v0.15.0开始,我们引入了一个新的标量类型Timedelta,它是datetime.timedelta的子类,行为方式类似,但允许与np.timedelta64类型兼容,以及一系列自定义表示,解析和属性.

Timedeltas是时间上的差异,以差异单位表示,例如天,小时,分钟,秒.他们可以是积极的和消极的.

df

           0
0 2012-08-21
1 2013-02-17
2 2013-02-18
3 2013-03-03
4 2013-03-04

你可以:

pd.to_timedelta(df)

TimedeltaIndex(['0 days'], dtype='timedelta64[ns]', freq=None)
0      0
1    180
2      1
3     13
4      1
Name: 0, dtype: int64

或者,您可以使用.shift()(或.diff()如@Andy Hayden所示)计算时间点之间的差异:

res = df-df.shift()

要得到:

res.fillna(0)

         0
0   0 days
1 180 days
2   1 days
3  13 days
4   1 days

您可以将这些转换timedelta64 dtypeinteger使用:

res.fillna(0).squeeze().dt.days

0      0
1    180
2      1
3     13
4      1

推荐阅读
殉情放开那只小兔子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有