2016-03-23 23 views
2

Dakikalar ve saniyeler (datetime) olan bir sütunlu pandalar veri çerçevem ​​var. Zaman serileri birkaç saat sürüyor, böylece yeni bir saat başladığında dakikalar ve saniyeler 0'da başlıyor. Her dönüldüğünde tarih saatine bir saat eklemek istiyorum. Bunu yapmanın basit bir yolu hakkında herhangi bir öneri var mı?Birkaç dakika ve saniye ile bir datetime serisine bir saat "sütun" ekleyebilirim

Kod benim datetime sütun şimdi neye benzediğini

TempDataFrame = pandas.read_csv(filepath_or_buffer=TempDataFilePath, header=0, sep=',', skiprows = 7, encoding='latin-1') 
TempDataFrame['Date/Time'] = pandas.to_datetime(TempDataFrame['Date/Time'], format='%M:%S.%f') 

Örnek benim verilerini yüklemek için.

1900-01-01 0:27:58 
1900-01-01 0:27:59 
1900-01-01 0:28:00 
1900-01-01 0:28:01 
........ 
1900-01-01 0:59:57 
1900-01-01 0:59:58 
1900-01-01 0:59:59 
1900-01-01 0:00:00 
1900-01-01 0:00:01 
1900-01-01 0:00:02 
........ 
1900-01-01 0:59:57 
1900-01-01 0:59:58 
1900-01-01 0:59:59 
1900-01-01 0:00:00 
1900-01-01 0:00:01 
1900-01-01 0:00:02 
etc... 

Ben ile bitirmek istiyorum ne Örneği

1900-01-01 0:27:58 
1900-01-01 0:27:59 
1900-01-01 0:28:00 
1900-01-01 0:28:01 
........ 
1900-01-01 0:59:57 
1900-01-01 0:59:58 
1900-01-01 0:59:59 
1900-01-01 1:00:00 
1900-01-01 1:00:01 
1900-01-01 1:00:02 
........ 
1900-01-01 1:59:57 
1900-01-01 1:59:58 
1900-01-01 1:59:59 
1900-01-01 2:00:00 
1900-01-01 2:00:01 
1900-01-01 2:00:02 
etc... 

cevap

2

IIUC sonra bu çalışacaktır:

In [175]: 
df['datetime'] = df['datetime'] + pd.TimedeltaIndex((df['datetime'] < df['datetime'].shift()).cumsum(), 'H') 
df 

Out[175]: 
       datetime 
0 1900-01-01 00:27:58 
1 1900-01-01 00:27:59 
2 1900-01-01 00:28:00 
3 1900-01-01 00:28:01 
4 1900-01-01 00:59:57 
5 1900-01-01 00:59:58 
6 1900-01-01 00:59:59 
7 1900-01-01 01:00:00 
8 1900-01-01 01:00:01 
9 1900-01-01 01:00:02 
10 1900-01-01 01:59:57 
11 1900-01-01 01:59:58 
12 1900-01-01 01:59:59 
13 1900-01-01 02:00:00 
14 1900-01-01 02:00:01 
15 1900-01-01 02:00:02 

Yani bu shift kullanarak önceki satırla tarihsaat karşılaştırır ve Bu durumda, hour bileşeniolarak kaldığı için bu zamanlar önceki satırdan daha az olduğunda True dönecektir. 0, biz bu konuda cumsum() diyoruz:

In [178]: 
(df['datetime'] < df['datetime'].shift()).cumsum() 

Out[178]: 
0  0 
1  0 
2  0 
3  0 
4  0 
5  0 
6  0 
7  1 
8  1 
9  1 
10 1 
11 1 
12 1 
13 2 
14 2 
15 2 
Name: datetime, dtype: int32 

Biz daha sonra her datetime saat arasında Series eklemek için TimedeltaIndex oluşturmak için kullanabilir

İlgili konular