簡體   English   中英

熊貓日期時間序列的累計經過分鍾數

[英]Cumulative elapsed minutes from Pandas datetime Series

我有一列日期時間戳。 我需要一列從第一個值到最后一個值過去的總分鍾數。

我有:

>>> 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的Pandas,即從每個值到下一個值的時間差。

>>> 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)將進行舍入。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM