Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 时间序列中的累计已用分钟数_Python_Pandas_Datetime - Fatal编程技术网

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整除的秒数,则会进行舍入。

可能的