我一直在寻找从以下数据集中检索基于组的扩展方法:
df = pd.DataFrame({'id':[1,1,1,2,2,2],'y':[1,2,3,1,2,3]})
和
df.groupby('id').expanding().mean().values
返回正确的:
array([[1. ],
[1.5],
[2. ],
[1. ],
[1.5],
[2. ]])
但是,在我的具体情况下,我还必须处理一些缺失的值,因此:
df2 = pd.DataFrame({'id':[1,1,1,2,2,2],'y':[1,pd.NA,3,1,2,3]})
应用相同逻辑的预期结果是忽略平均值计算中的 NaN,因此从
df2.groupby('id').expanding().mean().values
我期望
array([[1. ],
[1.],
[2. ],
[1. ],
[1.5],
[2. ]])
相反,Pandas 由于在后端应用某种类型断言来浮动而返回错误。我的天真的尝试(例如,
.expanding().apply(lambda x: np.nansum(x)
)都没有解决这个问题。任何(可能同样紧凑)的解决方案?
# Dataframe with missing values
df2 = pd.DataFrame({'id': [1, 1, 1, 2, 2, 2], 'y': [1, pd.NA, 3, 1, 2, 3]})
# Replace pd.NA with np.nan (required to ensure compatibility with float type)
df2['y'] = df2['y'].replace({pd.NA: np.nan})
# Convert column y to a float type
df2['y'] = df2['y'].astype(float)
# Group by id and compute the expanding mean (ignores NaN values)
expanding_means = df2.groupby('id')['y'].expanding().mean().values
print(expanding_means)