大熊猫持续时间的日期

时间:2015-12-24 01:36:10

标签: python pandas timedelta

我觉得这应该很容易完成,但我无法弄清楚如何。我的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
...

有什么想法吗?

3 个答案:

答案 0 :(得分:6)

Timedeltas在这里很有用:(see docs)

  

从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 dtype转换为integer

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

0      0
1    180
2      1
3     13
4      1

答案 1 :(得分:4)

您可以使用diff

In [11]: s
Out[11]:
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]

In [12]: s.diff()
Out[12]:
0        NaT
1   180 days
2     1 days
3    13 days
4     1 days
Name: date, dtype: timedelta64[ns]

In [13]: s.diff().fillna(0)
Out[13]:
0     0 days
1   180 days
2     1 days
3    13 days
4     1 days
Name: date, dtype: timedelta64[ns]

答案 2 :(得分:2)

df.date[1:] - df.date[:-1]没有按照您的想法行事。每个元素都通过系列/数据框索引映射减去,而不是按系列中的位置减去。

计算df.date[1:] - df.date[:-1]会:

+---- index of df.date[1:]
|                     +---- index of df.date[:-1]
|                     |
|                     v
v                     
                   -  0    2012-08-21    = NaT
1    2013-02-17    -  1    2013-02-17    = 0
2    2013-02-18    -  2    2013-02-18    = 0
3    2013-03-03    -  3    2013-03-03    = 0
4    2013-03-04    -                     = NaT