创建数字变量问题

时间:2018-08-15 16:02:41

标签: python python-3.x pandas pandas-groupby

我正在尝试创建一个新变量,作为数据库(mark1 type = float)中存在的另一个数字变量的平均值。 不幸的是,结果是一个带有所有NaN值的新列。 仍然无法理解原因。 我编写的代码如下:

df = pd.read_csv("students2.csv")
df.loc[:, 'mean_m1'] = pd.Series(np.mean(df['mark1']).mean(), index= df)

此代码后的前几行:

df.head()
   ID  gender  subject  mark1  mark2  mark3       fres  mean_m1
0   1      mm        1   17.0   20.0   15.0        neg      NaN
1   2       f        2   24.0  330.0   23.0        pos      NaN
2   3  FEMale        1   17.0   16.0   24.0          0      NaN
3   4    male        3   27.0   23.0   21.0          1      NaN
4   5       m        2   30.0   22.0   24.0   positive      NaN

None错误消息被打印。 非常感谢!

1 个答案:

答案 0 :(得分:0)

您需要GroupBy + transform'mean'

对于您提供的数据,这等于mark1。您可能应该将性别映射到类别,例如MF,作为初步步骤。

df['mean_m1'] = df.groupby('gender')['mark1'].transform('mean')

print(df)

   ID  gender  subject  mark1   mark2  mark3      fres  mean_m1
0   1      mm        1 17.000  20.000 15.000       neg   17.000
1   2       f        2 24.000 330.000 23.000       pos   24.000
2   3  FEMale        1 17.000  16.000 24.000         0   17.000
3   4    male        3 27.000  23.000 21.000         1   27.000
4   5       m        2 30.000  22.000 24.000  positive   30.000