熊猫日期时间序列的累计经过分钟数

时间:2018-10-08 01:13:06

标签: python pandas datetime

我有一列日期时间戳记。我需要一列从第一个值到最后一个值过去的总分钟数。

我有:

>>> df = pd.DataFrame({'timestamp': [
...     pd.Timestamp('2001-01-01 06:00:00'),
...     pd.Timestamp('2001-01-01 06:01:00'),
...     pd.Timestamp('2001-01-01 06:15:00')
... ]})

>>> df
            timestamp
0 2001-01-01 06:00:00
1 2001-01-01 06:01:00
2 2001-01-01 06:15:00

我需要添加一列以给出运行总计:

timestamp       minutes
1-1-2001 6:00   0
1-1-2001 6:01   1
1-1-2001 6:15   15
1-1-2001 7:00   60
1-1-2001 7:35   95

很难处理datetime系列,以便我总计时间戳。

我看了很多帖子,找不到任何可以做的事情。将不胜感激!

1 个答案:

答案 0 :(得分:0)

您可以将几种方法链接在一起:

>>> df['minutes'] = df['timestamp'].diff().fillna(0).dt.total_seconds()\
...     .cumsum().div(60).astype(int)

>>> df
            timestamp  minutes
0 2001-01-01 06:00:00        0
1 2001-01-01 06:01:00        1
2 2001-01-01 06:15:00       15

创作:

>>> df = pd.DataFrame({'timestamp': [
...     pd.Timestamp('2001-01-01 06:00:00'),
...     pd.Timestamp('2001-01-01 06:01:00'),
...     pd.Timestamp('2001-01-01 06:15:00')
... ]})

演练

最简单的方法是分离每个中间方法调用。

df['timestamp'].diff()为您提供了一系列与Python datetime.timedelta类似的熊猫,以及从每个值到下一个值的时间差异。

>>> df['timestamp'].diff()
0        NaT
1   00:01:00
2   00:14:00
Name: timestamp, dtype: timedelta64[ns]

它包含一个N / A值(NaT /不是时间),因为没有什么要从第一个值中减去。您只需将timedelta的零值填充即可:

>>> df['timestamp'].diff().fillna(0)
0   00:00:00
1   00:01:00
2   00:14:00
Name: timestamp, dtype: timedelta64[ns]

现在,您需要从这些对象获取实际的整数(分钟)。在.dt.total_seconds()中,.dt是一个“访问器”,它是一种访问一系列方法的方法,这些方法使您可以处理类似日期时间的数据:

>>> df['timestamp'].diff().fillna(0).dt.total_seconds()
0      0.0
1     60.0
2    840.0
Name: timestamp, dtype: float64

结果是作为浮点数的增量第二变化。您需要以分钟为单位,以整数形式累积该值。这就是最后的三个操作:

>>> df['timestamp'].diff().fillna(0).dt.total_seconds().cumsum().div(60).astype(int)
0     0
1     1
2    15
Name: timestamp, dtype: int64

请注意,如果您的秒数不能完全被60整除,astype(int)会四舍五入。