[英]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.