Pandaları kullanarak çok sayıda seçeneğiniz var, ancak verileri aynı anlarda bulunmadıklarına göre hizalamak nasıl mantıklı bir karar vermek zorundasınız. Bu 30 saniye gecikmeli görünür görebilirsiniz
In [15]: ts
Out[15]:
2000-01-03 00:00:00 -0.722808451504
2000-01-04 00:00:00 0.0125041039477
2000-01-05 00:00:00 0.777515530539
2000-01-06 00:00:00 -0.35714026263
2000-01-07 00:00:00 -1.55213541118
2000-01-10 00:00:00 -0.508166334892
2000-01-11 00:00:00 0.58016097981
2000-01-12 00:00:00 1.50766289013
2000-01-13 00:00:00 -1.11114968643
2000-01-14 00:00:00 0.259320239297
In [16]: ts2
Out[16]:
2000-01-03 00:00:30 1.05595278907
2000-01-04 00:00:30 -0.568961755792
2000-01-05 00:00:30 0.660511172645
2000-01-06 00:00:30 -0.0327384421979
2000-01-07 00:00:30 0.158094407533
2000-01-10 00:00:30 -0.321679671377
2000-01-11 00:00:30 0.977286027619
2000-01-12 00:00:30 -0.603541295894
2000-01-13 00:00:30 1.15993249209
2000-01-14 00:00:30 -0.229379534767
:
zaman serisi birinde kez "itibariyle" değerleri kullanın, işte size bir örnek. ileriye değerleri doldururken reindex
fonksiyonu verileri hizaya olanak tanır (alma değeri "olarak"):
'ped' da ancak çok son sürümünde ('ffill' tarafından, diğer ad olarak not olduğunu
In [17]: ts.reindex(ts2.index, method='pad')
Out[17]:
2000-01-03 00:00:30 -0.722808451504
2000-01-04 00:00:30 0.0125041039477
2000-01-05 00:00:30 0.777515530539
2000-01-06 00:00:30 -0.35714026263
2000-01-07 00:00:30 -1.55213541118
2000-01-10 00:00:30 -0.508166334892
2000-01-11 00:00:30 0.58016097981
2000-01-12 00:00:30 1.50766289013
2000-01-13 00:00:30 -1.11114968643
2000-01-14 00:00:30 0.259320239297
In [18]: ts2.corr(ts.reindex(ts2.index, method='pad'))
Out[18]: -0.31004148593302283
GitHub pandaları bu zamana kadar!).
Tüm saatlerinizden saniyelerle çıkar çıkmaz. Bunu yapmanın en iyi yolu, yeniden adlandırma yinelenen tarihleri kullanılabilmesine neden olursa bir Exception
atılmış olacağını rename
In [25]: ts2.rename(lambda date: date.replace(second=0))
Out[25]:
2000-01-03 00:00:00 1.05595278907
2000-01-04 00:00:00 -0.568961755792
2000-01-05 00:00:00 0.660511172645
2000-01-06 00:00:00 -0.0327384421979
2000-01-07 00:00:00 0.158094407533
2000-01-10 00:00:00 -0.321679671377
2000-01-11 00:00:00 0.977286027619
2000-01-12 00:00:00 -0.603541295894
2000-01-13 00:00:00 1.15993249209
2000-01-14 00:00:00 -0.229379534767
Not kullanmaktır. eğer
In [31]: ts_mean = ts.groupby(lambda date: date.replace(second=0)).mean()
In [32]: ts2_mean = ts2.groupby(lambda date: date.replace(second=0)).mean()
In [33]: ts_mean.corr(ts2_mean)
Out[33]: -0.31004148593302283
Bu son kod parçalarını çalışmayabilir: biraz daha ileri bir şey için
yaptığında (saniyede birden gözlemleri var) her dakika için ortalama değerini ilişkilendirmek istediğini varsayalım En son kod https://github.com/wesm/pandas'dan yok. .mean()
, yukarıdaki gibi bir GroupBy
nesnesinde çalışmıyorsa, .agg(np.mean)
Yardım edin!
Ha, elimden geleni yaptın: -) ... –
Son bölümü doğru okursam, son bölüm 00 ile 60 saniye arasındaki değerlerin ortalamasını hesaplar (XX: XX: 30 değil, XX: XX: 00 için ortalama) ve sonucu XX: XX olarak atar. : 00. Bunun basit bir yolu, date.replace (second = 30) 'dır, dakika başına ortalamaları almak için çok karmaşık bir yol olurdu: ts_mean = seriesT.groupby (lambda date: date.replace (second = 0) eğer date.second <30 else date.replace (saniye = 0) + zaman dilimi (dakika = 1)). mean() ' – user814005