我有一列日期时间戳记。我需要一列从第一个值到最后一个值过去的总分钟数。
我有:
>>> 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系列,以便我总计时间戳。
我看了很多帖子,找不到任何可以做的事情。将不胜感激!
答案 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)
会四舍五入。