2017-09-09 18 views
0

私はPythonユーザです。 は次のようにExcelを持っている:パンダは同じ最も近い値の間に時間を計算します

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は無視され、中央num個の点に注意してください。

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の間に、このような場合は期間を把握したいです。パンダでは を使うのが一番です。ここで

+0

あるNUM 24を持っているので、これらの二つの36サイズが連続していないので、それは0 –

答えて

1

私は、あなたが最初のCSVするExcelファイルをエクスポートしていると仮定し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 

出力は、2つの36サイズの真ん中に[0, 60, 0, 60, 0, 0, 0, 0, 0, 120]

+0

ですのでサイズは、それらの間で変更されたあなたに感謝あなたの答えです。どのようなパンダの組み込みのコマンドは、この状況を解決することができます、いけないループを使用したいです。 –

+0

私はこのような組み込みコマンドを認識していません – nos

+0

あなたの答えは –

関連する問題