2017-09-09 96 views
0

我是一個python用戶。 有一個excel這樣的:熊貓計算相同最近值之間的時間跨度

time size 
2017-08-16 00:00:00 12  
2017-08-16 00:01:00 12  
2017-08-16 00:02:00 24 
2017-08-16 00:03:00 24  
2017-08-16 00:04:00 36 
2017-08-16 00:05:00 24  
2017-08-16 00:06:00 36  
2017-08-16 00:07:00 24  
2017-08-16 00:08:00 24  
2017-08-16 00:09:00 24  

想弄清楚的時間跨度,如果最近同NUM之間,就像這樣:

time size timespan 
    2017-08-16 00:00:00 12 0 
    2017-08-16 00:01:00 12 60 
    2017-08-16 00:02:00 24 0 
    2017-08-16 00:03:00 24 60 
    2017-08-16 00:04:00 36 0 
    2017-08-16 00:05:00 24 0 
    2017-08-16 00:06:00 36 0 
    2017-08-16 00:07:00 24 0 
    2017-08-16 00:08:00 24 0 
    2017-08-16 00:09:00 24 120 

請注意中間NUM 24被忽略。 可以在熊貓中使用是最好的。

+0

兩個36大小有NUM 24的中間,所以這兩個36的尺寸是不連續的,所以大小之間變化,所以它是0 –

回答

1

這裏我假設你已經導出Excel文件先CSV,說time.csv

time,size 
2017-08-16 00:00:00, 12  
2017-08-16 00:01:00, 12  
2017-08-16 00:02:00, 24 
2017-08-16 00:03:00, 24  
2017-08-16 00:04:00, 36 
2017-08-16 00:05:00, 24  
2017-08-16 00:06:00, 36  
2017-08-16 00:07:00, 24  
2017-08-16 00:08:00, 24  
2017-08-16 00:09:00, 24 

和解決方法如下。主要思想是當size與前一個相同但不同於下一個時,需要計算結果值。

import pandas as pd                 
from datetime import datetime              

a = pd.read_csv('time.csv')               
times = [datetime.strptime(x, '%Y-%m-%d %H:%M:%S') for x in a['time']]    

aa = list(a['size']) + [None]              
res = [0] * len(a)                 

prev = None                   
for i, x in enumerate(a['size']):             
    if x != prev:                 
     begin_time = times[i]              
    elif x != aa[i + 1]:               
     res[i] = (times[i] - begin_time).seconds         
    prev = x                  
print res 

輸出爲[0, 60, 0, 60, 0, 0, 0, 0, 0, 120]

+0

謝謝爲你的答案。有沒有任何熊貓內置的命令可以解決這種情況,不想使用循環。 –

+0

我不知道這樣的內置命令 – nos

+0

thx爲您的答案 –