私はpandasデータフレームを持っており、(groupby句の後の)列のローリング平均を計算したいと思います。しかし、私はNaNを除外したい。pandas groupbyとrolling_apply NaNを無視する
たとえば、groupbyが[2、NaN、1]を返す場合、結果は1.5で、現在はNaNを返します。
私は次のことを試してみたが、動作していないよう:
df.groupby(by=['var1'])['value'].apply(pd.rolling_apply, 3, lambda x: np.mean([i for i in x if i is not np.nan and i!='NaN']))
私もこのしよう:それはしなければならないので、
df.groupby(by=['var1'])['value'].apply(pd.rolling_apply, 3, lambda x: 1)
私は出力にはNaNを取得していますがパンダがバックグラウンドでどのように働くかと関係があります。
アイデア?
EDIT:ここに は私が何をしようとしているとのコードサンプルです:
import pandas as pd
import numpy as np
df = pd.DataFrame({'var1' : ['a', 'b', 'a', 'b', 'a', 'b', 'a', 'b'], 'value' : [1, 2, 3, np.nan, 2, 3, 4, 1] })
print df.groupby(by=['var1'])['value'].apply(pd.rolling_apply, 2, lambda x: np.mean([i for i in x if i is not np.nan and i!='NaN']))
結果は次のとおりです。
0 NaN
1 NaN
2 2.0
3 NaN
4 2.5
5 NaN
6 3.0
7 2.0
私は次のことを持っていると思っている間:
0 NaN
1 NaN
2 2.0
3 2.0
4 2.5
5 3.0
6 3.0
7 2.0
自分で作成しなくても、あなたが持っている同様の情報で遊ぶことができるように、小さな再現可能なコードセットを提供してください。 – piRSquared
@piRSquaredコードサンプルを追加しました。ありがとう – Stergios