2017-10-31 5 views
0

シリーズ内の値間の増分変更を計算してから、最初の系列と同じ系列を再加算して作成することはできません。どうして?これは可能なはずです。私はここのデータに全く変更を加えません。インクリメンタルを計算した後に変更を加えずに累積シリーズを再作成できません。どうして?

私の実際のアプリケーションでは、ゲージの累積降水量を出力する気象観測所データを使用しています。エラーが発生した増分値(たとえば、サービス訪問中)を0に設定し、新しい累積timeseriesを出力したいと思います。これをトラブルシューティングするにあたって、増分変化値を計算して再集計することによって、時系列データへの変更を導入していることに気付きました。私はここで何が欠けていますか?

#Original values in cumulative series 
vals=pd.Series(np.random.randn(250000).cumsum()) 

#Calculate incremental change 
incremental_vals=vals-vals.shift(1) #calculate incremental changes 

#Calculate cumulative sum of incremental values 
new_cumulative=incremental_vals.cumsum() 
new_cumulative[0]=vals[0] #set first value of new cumulative series to equal iniitial value; NAN introduced 

#Check if new series equals original 
vals.equals(new_cumulative) 

2つのシリーズが等しくない。プロットすると、さらに洞察が得られます。 enter image description here 増分変更シリーズを作成し、変更を加えずに累積値に再加算する方法を教えてください。これができない場合は、理由を説明していただきたいと思います。自分のために答える

+1

をあなたは時に再計算CUMSUM最初の値を欠場します。 'new_cumulative [1:] = new_cumulative [1:] + new_cumulative [0]' – Ian

+0

@Ian - ポインタに感謝します。 'new_cumulative = new_cumulative + vals [0] new_cumulative [0] = vals [0]'で修正できました。あなたのコメントは、 'vals [0]'の代わりに 'new_cumulative [0]'を追加しています。それを答えとして加えると、私はそれを受け入れます。ありがとう! – EHB

+0

あなたのシリーズでNANを持つことも、これを読むかもしれない他の人々のためにも違いが生じます。差異化の前にそれらを埋める方がよいでしょう。 – EHB

答えて

0

ので、私はこの後を参照することができます。

#Original values in cumulative series 
vals=pd.Series(np.random.randn(250000).cumsum()) 

#Calculate incremental change 
incremental_vals=vals-vals.shift(1) #calculate incremental changes 

#Calculate cumulative sum of incremental values 
new_cumulative=incremental_vals.cumsum() 
new_cumulative = new_cumulative + vals[0] 
new_cumulative[0]=vals[0] #set first value of new cumulative series to equaliniitial value; NAN introduced 
関連する問題