繁体   English   中英

熊猫计算相同最近值之间的时间跨度

[英]pandas calculate timespan between same nearest values

我是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    

要计算出时间跨度是否介于最接近的相同数字之间,例如:

    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

请注意,中间的数字24被忽略。 可以在大熊猫中使用是最好的。

在这里,我假设您首先将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]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM