对于Python中的数据框(请参见下文),我想使用S元素所属的G组的均值和标准偏差来计算S的z得分,即S的s属于a G组g
s_z = (s - mu(g))/sigma(g).
最优雅的方法是什么?
G S
0 B 0.444939
1 D 0.407554
2 C 0.460148
3 B 0.465239
4 A 0.462691
5 A 0.016545
6 D 0.850445
7 C 0.817744
8 B 0.777962
9 C 0.757983
10 C 0.934829
最佳答案
我认为您需要具有lambda函数的groupby
-与mean
和std
或通过scipy.stats.zscore
,仅需要更改默认值ddof
:
from scipy.stats import zscore
df['s_z'] = df.groupby('G')['S'].transform(lambda x: (x-x.mean())/x.std())
df['s_z1'] = df.groupby('G')['S'].transform(lambda x: zscore(x, ddof=1))
print (df)
G S s_z s_z1
0 B 0.444939 -0.630865 -0.630865
1 D 0.407554 -0.707107 -0.707107
2 C 0.460148 -1.397499 -1.397499
3 B 0.465239 -0.522127 -0.522127
4 A 0.462691 0.707107 0.707107
5 A 0.016545 -0.707107 -0.707107
6 D 0.850445 0.707107 0.707107
7 C 0.817744 0.371317 0.371317
8 B 0.777962 1.152993 1.152993
9 C 0.757983 0.075715 0.075715
10 C 0.934829 0.950467 0.950467