pandas groupby 扩展均值不接受缺失值

问题描述 投票:0回答:1

我一直在寻找从以下数据集中检索基于组的扩展方法:

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)
)都没有解决这个问题。任何(可能同样紧凑)的解决方案?

python pandas group-by nan
1个回答
0
投票
# 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)
© www.soinside.com 2019 - 2024. All rights reserved.