根据另一列的值查找一列的标准差并分组

Find standard deviation of a column based of values from another column and group by

我有一个如下所示的数据框:

classid  grade  haveTeacher
0        99     1
1        40     1
1        50     0
1        70     1
2        50     0
3        34     0

我想知道我可以在 pandas 中写些什么来找出有老师的类中“等级”的标准差(1 表示有老师)。我知道我们必须按“classid”进行分组,但我想知道 .apply 和 lambda 函数中会包含什么来满足所有这些条件?

为了提高性能,如果 haveTeacher 中没有 1 通过 Series.where 首先设置缺失值,然后聚合 std:

df = (df['grade'].where(df['haveTeacher'].eq(1))
                 .groupby(df['classid'])
                 .std()
                 .reset_index(name='std'))
print (df)
   classid        std
0        0        NaN
1        1  21.213203
2        2        NaN
3        3        NaN

如果 DataFrame 很大,建议的解决方案应该很慢:

df = (df.groupby('classid')
        .apply(lambda x: x.loc[x['haveTeacher'].eq(1), 'grade'].std())
        .reset_index(name='std'))
print (df)
   classid        std
0        0        NaN
1        1  21.213203
2        2        NaN
3        3        NaN

您可能首先想要获取包含教师 - df[df['haveteacher'] == 1] 记录的数据框。一旦你得到这个,你可以做一个 groupby(classid) 并使用 numpy.std (之前的 import numpy as np )函数来找到该组的标准偏差 所以你有 -

>>> df[df['haveteacher'] == 1].groupby(['classid']).agg({'grade': np.std})

输出为-

grade
classid           
0              NaN
1        21.213203