我有一些学生数据需要取平均值。我意识到,当我在 pandas 中进行计算时,我得到的平均值是根据学生完成的科目数量得出的,它不包括学生没有参加的科目。但是,我需要它使用该班级的科目总数(包括学生没有参加的科目)来计算平均值。这甚至可能吗?
df["AVE"] = df[column_list].mean(axis=1).round(decimals=0)
将缺失值替换0
为DataFrame.fillna
:
df = pd.DataFrame({
'A':list('abcdef'),
'B':[np.nan,5,np.nan,5,5,np.nan],
'C':[7,8,9,np.nan,2,3],
'D':[1,3,5,7,1,0],
'E':[5,3,6,9,2,np.nan],
'F':list('aaabbb')
})
column_list = ['B','C','D']
df["AVE1"] = df[column_list].mean(axis=1).round(decimals=0)
df["AVE2"] = df[column_list].fillna(0).mean(axis=1).round(decimals=0)
print (df)
A B C D E F AVE1 AVE2
0 a NaN 7.0 1 5.0 a 4.0 3.0
1 b 5.0 8.0 3 3.0 a 5.0 5.0
2 c NaN 9.0 5 6.0 a 7.0 5.0
3 d 5.0 NaN 7 9.0 b 6.0 4.0
4 e 5.0 2.0 1 2.0 b 3.0 3.0
5 f NaN 3.0 0 NaN b 2.0 1.0
谢谢你做得很好。
df["AVE"] = df[column_list].fillna(0).mean(axis=1).round(decimals=0)
如果您想在存在 NaN 时返回 NaN,如在 Numpy mean() 中,您可以使用 skipna 参数用于 skeeping/not skeeping,NA/null 值。默认情况下,此参数设置为 True:
df["AVE"] = df[column_list].mean(axis=1, skipna=False).round(decimals=0)
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.mean.html