2

我有一些学生数据需要取平均值。我意识到,当我在 pandas 中进行计算时,我得到的平均值是根据学生完成的科目数量得出的,它不包括学生没有参加的科目。但是,我需要它使用该班级的科目总数(包括学生没有参加的科目)来计算平均值。这甚至可能吗?

df["AVE"] = df[column_list].mean(axis=1).round(decimals=0)
4

3 回答 3

2

将缺失值替换0DataFrame.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
于 2020-05-07T07:55:58.060 回答
0

谢谢你做得很好。

df["AVE"] = df[column_list].fillna(0).mean(axis=1).round(decimals=0)
于 2020-05-07T08:02:05.473 回答
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

于 2020-05-07T08:05:34.467 回答