我有一个pandas数据框,想要在经过groupby处理的列上计算滚动平均值。然而,我希望排除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,因此可能与pandas在后台的工作方式有关。
有任何想法吗?
编辑: 这是我尝试做的一个代码示例:
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