1

デートシリーズはこんな感じ。

In [89]:
db.close[:5]

Out[89]:
datetime
2012-06-28 23:58:00    1.243925
2012-06-28 23:59:00    1.244125
2012-06-29 00:00:00    1.244065
2012-06-29 00:01:00    1.243875
2012-06-29 00:02:00    1.243865
Name: close

各要素から前の要素を減算したいと思います。

In [93]:
db.close[1:5] - db.close[:4]

Out[93]:
datetime
2012-06-28 23:58:00   NaN
2012-06-28 23:59:00     0
2012-06-29 00:00:00     0
2012-06-29 00:01:00     0
2012-06-29 00:02:00   NaN
Name: close

配列はオフセットなしで減算されました。

しかし、配列要素を比較すると...

n [94]:

db.close[1:5] == db.close[:4]
Out[94]:
datetime
2012-06-28 23:59:00    False
2012-06-29 00:00:00    False
2012-06-29 00:01:00    False
2012-06-29 00:02:00    False
Name: close
4

2 に答える 2

3

これは実際には意図的なものです。算術演算ではデータの位置合わせが行われますが、比較では行われません。過去に変更を検討しましたが、あまりにも多くの問題が発生することがわかりました (特に、NumPy 配列を期待する関数に Series を渡す場合、例としてnumpy.diff)。

編集:アライメントを取得するには、手動でアライメントを行うことができます:

In [10]: numpy.equal(*a.align(b))
Out[10]: 
2000-01-03    False
2000-01-04     True
2000-01-05     True
2000-01-06     True
2000-01-07     True
2000-01-10    False
Freq: B
于 2012-10-21T22:51:15.883 に答える
0

私は自分の質問に対する答えを見つけました。それは誰かに役立つかもしれません。

In [38]:
db.close.shift(periods=1).head() - db.close.head()

Out[38]:
datetime
2012-06-28 23:58:00        NaN
2012-06-28 23:59:00   -0.00020
2012-06-29 00:00:00    0.00006
2012-06-29 00:01:00    0.00019
2012-06-29 00:02:00    0.00001
Freq: T, Name: close

残念ながら、通常の算術演算よりも 2 ~ 3 倍遅くなります。

In [40]:

%timeit db.close.shift(periods=1) - db.close
1000 loops, best of 3: 1.64 ms per loop

%timeit db.close - db.open
1000 loops, best of 3: 700 us per loop
于 2012-10-22T16:21:32.390 に答える