根据另一列的值查找一列的标准差并分组
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
我有一个如下所示的数据框:
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