2016-10-08 4 views
0

私はパンダシリーズ、時間と値を持っています。 各値の間の変更を計算したいと思います。 このように:現在の値/前の値。同じシリーズのパンダシリーズを1つに分けて移動しました

私はこのコードを実行すると:

print now.head(n=3) 
print before.head(n=3) 
delta = now.divide(before) 
print delta.iloc[1] 
print now.iloc[1]/before.iloc[1] 

を、私はこの結果を得る:最後の二つの数字が同じではないので、

DateTime 
2014-01-08 09:27:00 623.53836 
2014-01-08 09:28:00 623.54066 
2014-01-08 09:32:00 623.53846 
Name: close, dtype: float64 
DateTime 
2014-01-08 09:26:00 624.01000 
2014-01-08 09:27:00 623.53836 
2014-01-08 09:28:00 623.54066 
Name: close, dtype: float64 
1.0 
1.00000368863 

は、私が何をしないのですか?

シリーズは今までと同じシリーズで、1つだけシフトしました。

更新:問題は、分割するときにパンダが一致するインデックスです。幸いにもpandasには、私が欲しいものを正確に実行する.pct_change()という組み込み関数があります。私にそれを見せてくれたSteven G.に感謝します。

答えて

0

問題がある場合は、delta = now.divide(before)と一致します。そう[1] 2014-01-08 09:27:00インデックス

あなたは整数位置now.iloc[1]/before.iloc[1]を使用する場合、それは623.54066/623.53836

.iloc[1]が第二の行であることを覚えないので、インデックスを気にしないで分割を表す623.53836/623.53836なりdelta.ilocと

now['delta'] = now.values/before.values 

これはあなたのnに新しい列を追加します:.iloc[0]はあなたが値で割ることができ、最初の行

+1

私は彼の質問には、[1] /前になぜか "delta.iloc [1]" と「now.ilocだと思います。 iloc [1] "は異なる –

+0

両方とも1.0の束を返します。 – Nis

+0

@jeffcareyああ、私が見て、修正されます!それを指摘してくれてありがとう –

0

ですもちろんデータフレームです。

代わりに、あなたは、独自のデータフレームでこれをしたい場合は、あなたが書くことができる:

delta = now.copy() 
delta['delta'] = now.close.values/before.close.values 
delta.drop('close', 1, inplace=True) 
関連する問題