你有一些使用熊貓的選擇,但你必須做一個關於如何有意義的對齊因爲他們沒有在同一時刻發生數據決定。
使用值「爲」時間序列的一個時代,這裏有一個例子:
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
可以看到這些都是關閉的30秒。該reindex
功能可以對齊數據卻使前值(獲得「爲」值):
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
注意「墊」也是由「ffill」別名(但只有在那些最新版本截至目前,GitHub上的熊貓!)。
地帶秒所有日期時間的。要做到這一點,最好的辦法是使用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
注意,如果重命名導致那裏是重複日期的Exception
將被拋出。
對於一些更先進一點,假設你想爲每分鐘的平均值(你有每秒多次觀察)相關:
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
這些最後的代碼片段可能不會,如果你的工作沒有來自https://github.com/wesm/pandas的最新代碼。如果.mean()
不能在上面的GroupBy
物體上試試.agg(np.mean)
希望這有助於!
哈,你之前,我可以得到它: - )... –
如果我正在閱讀最後一部分,最後一部分計算00到60秒(XX:XX:30,而不是XX:XX:00)的平均值,並將結果分配給XX:XX :00。簡單的解決方法是'date.replace(second = 30)',每分鐘得到平均數的過於複雜的方法是:'ts_mean = seriesT.groupby(lambda date:date.replace(second = 0)if date.second <30 else date.replace(second = 0)+ timedelta(minutes = 1))。mean()' – user814005