Python 时间序列中的累计已用分钟数
我有一列邮戳。我需要一列从第一个值到最后一个值的总分钟数 我有:Python 时间序列中的累计已用分钟数,python,pandas,datetime,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
>>> 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序列来计算时间戳的总数
我已经看了很多帖子,但找不到任何符合我想要做的事情。如果您有任何想法,我将不胜感激 您可以将几个方法链接在一起:
>>> 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
/不是时间),因为第一个值没有任何东西可以减去。您可以简单地用时间增量的零值填充它:
>>> 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
结果是以浮点形式递增的第二次更改。您需要以累积为基础,以分钟为单位,并将其作为整数。这就是最后3个操作所做的:
>>> df['timestamp'].diff().fillna(0).dt.total_seconds().cumsum().div(60).astype(int)
0 0
1 1
2 15
Name: timestamp, dtype: int64
请注意,astype(int)
如果有不能被60整除的秒数,则会进行舍入。可能的