2016-10-11 15 views
1

卵子とローリングのためのパラメータは、NAsを記入しないのですか?pandas NAMを記入しない卵子とローリングの方法

>>> A = pd.Series([1,2,3,4,np.nan,5,6]) 
>>> A 
0 1.0 
1 2.0 
2 3.0 
3 4.0 
4 NaN 
5 5.0 
6 6.0 
dtype: float64 
>>> eA = A.ewm(alpha = 0.5, ignore_na=True).mean() 
>>> eA 
0 1.000000 
1 1.666667 
2 2.428571 
3 3.266667 
4 3.266667 # I want this to be NA, don't fill in 
5 4.161290 
6 5.095238 
dtype: float64 

これは簡単に

eA[A.isnull()] = np.nan 

によって解決される。しかし、これはいくつかの不必要な走行時間を要し、そしてあなたがより多くを持っている場合、すべてのロール機能のための変数名を考える必要が面倒であるもちろんいくつか。残念ながら、これは現在ewmでサポートされていない

+1

代替法は、最初のインスタンスで 'NaN'を除外した後' combine_first'呼び出すことです。 'EAは= A [A.notnullを()] EWM( alpha = 0.5、ignore_na = True).mean() eA.combine_first(A) 'はあなたにth希望の結果 – EdChum

+0

興味深い。 'combine_first'関数をありがとう。それは便利です。ここで問題は 'ewm(min_periods = ...)'を呼び出すとウォーミングアップNAを満たすということです。 – jf328

+1

ここで問題となるのは 'ewm'内には存在しないことです。提案したように' NaN'を設定し、 'ewm'を呼び出す前に' NaN'値を落としてから'combine_first'や' reindex'のような多くのオプションがあり、 'NaN'の値を' ewm'の結果に再挿入する元のdfのインデックスを渡します。 – EdChum

答えて

1

が、あなたは、どちらのcombine_firstを使用することができ、あなたの提案した方法を使用してNaNで上書きしたりewmは、元のインデックスを保存Seriesを生成するように私たちのNaN行をフィルタする必要があると思いますか再挿入NaN行にreindex

In [32]: 
A = pd.Series([1,2,3,4,np.nan,5,6]) 
eA = A[A.notnull()].ewm(alpha = 0.5, ignore_na=True).mean() 
eA.combine_first(A) 

Out[32]: 
0 1.000000 
1 1.666667 
2 2.428571 
3 3.266667 
4   NaN 
5 4.161290 
6 5.095238 
dtype: float64 

In [33]: 
eA.reindex(A.index) 

Out[33]: 
0 1.000000 
1 1.666667 
2 2.428571 
3 3.266667 
4   NaN 
5 4.161290 
6 5.095238 
dtype: float64 
+0

'A [A.notnull()] .ewm(...)。mean()。reindex(A.index)'は、変数名の生成を避けるための素晴らしい一行回避策です。 ) – jf328

+0

これはうまくいくはずですが、私は個人的にはわかりやすいように連鎖しないようにしています – EdChum

関連する問題