2016-12-06 6 views
4

新しい.rollingおよび.ewmメソッドについては、私はパンダ0.19.0を使用しています。パンダはローリングし、ewmはnaを完全に無視して最後のN個の有効データを使用します

>>> df = pd.DataFrame({'A' : [1,2,np.nan, 3, 4, 5], 'B' : [1,2,3,np.nan, 4, 5]}) 
>>> df 
    A B 
0 1.0 1.0 
1 2.0 2.0 
2 NaN 3.0 
3 3.0 NaN 
4 4.0 4.0 
5 5.0 5.0 

>>> df.rolling(window = 3).mean() 
    A B 
0 NaN NaN 
1 NaN NaN 
2 NaN 2.0 
3 NaN NaN 
4 NaN NaN 
5 4.0 NaN 

必要な出力は、ナノを完全に無視し、最後の3つの有効なデータを使用し、それらの位置にナノを残すことです。 .ewmについては

 A B 
0 NaN NaN 
1 NaN NaN # first two we don't have enough data 
2 NaN 2.0 # B column is valid 
3 2.0 NaN # completely ignore the nan in df.ix[2,'A'], take the mean of last 3 valid data 
4 3.0 3.0 
5 4.0 4.0 

我々はignore_naパラメータを持っています。下のコードは私が望むものを手に入れます

output = df.ewm(com=2, ignore_na=True).mean() 
output[df.isnull()] = np.nan 

答えて

5

難しい部分は最後の3つの有効なデータポイントが必要です。

df.apply(lambda x: x.dropna().rolling(3).mean().reindex(x.index)) 

enter image description here

+0

私は間違いなく '.reindex'が必要ですか? 'df.apply(ラムダx:x.dropna()。rolling(3).mean())'もうまくいくようです。 – jf328

+0

ああ、そうです。はい、 '.reindex'は間違いなく必要です – jf328

関連する問題