Python 按组标准化变量-为什么平均值总是零?

Python 按组标准化变量-为什么平均值总是零?,python,pandas,standardized,Python,Pandas,Standardized,我有以下数据: df = pd.DataFrame({'sound': ['A', 'B', 'B', 'A', 'B', 'A'], 'score': [10, 5, 6, 7, 11, 1]}) print(df) sound score 0 A 10 1 B 5 2 B 6 3 A 7 4 B 11 5 A 1 如果我将score变量标准化

我有以下数据:

df = pd.DataFrame({'sound': ['A', 'B', 'B', 'A', 'B', 'A'],
                   'score': [10, 5, 6, 7, 11, 1]})
print(df)

  sound  score
0     A     10
1     B      5
2     B      6
3     A      7
4     B     11
5     A      1
如果我将
score
变量标准化(即Z分数),则得到以下值。新的
z
列的平均值基本上为0,SD为1,这两个值都是标准化变量的预期值:

df['z'] = (df['score'] - df['score'].mean())/df['score'].std()
print(df)
print('Mean: {}'.format(df['z'].mean()))
print('SD: {}'.format(df['z'].std()))

  sound  score         z
0     A     10  0.922139
1     B      5 -0.461069
2     B      6 -0.184428
3     A      7  0.092214
4     B     11  1.198781
5     A      1 -1.567636
Mean: -7.401486830834377e-17
SD: 1.0
然而,我真正感兴趣的是基于组成员身份计算Z分数(
声音
)。例如,如果分数来自声音a,则仅使用声音a值的平均值和SD将该值转换为Z分数。同样,声音B Z分数将仅使用声音B的平均值和SD。与常规Z分数计算相比,这将产生不同的值:

df['zg'] = df.groupby('sound')['score'].transform(lambda x: (x - x.mean()) / x.std())
print(df)
print('Mean: {}'.format(df['zg'].mean()))
print('SD: {}'.format(df['zg'].std()))

  sound  score         z        zg
0     A     10  0.922139  0.872872
1     B      5 -0.461069 -0.725866
2     B      6 -0.184428 -0.414781
3     A      7  0.092214  0.218218
4     B     11  1.198781  1.140647
5     A      1 -1.567636 -1.091089
Mean: 3.700743415417188e-17
SD: 0.894427190999916
我的问题是:为什么基于组的标准值(
zg
)的平均值也基本上等于0?这是预期的行为还是我的计算中有错误

z
分数是有意义的,因为变量内的标准化本质上迫使平均值为0。但是对于每个声音组,
zg
值是使用不同的平均值和SDs来计算的,所以我不确定为什么新变量的平均值也被设置为0


我能看到这种情况发生的唯一情况是,如果值之和>0等于值之和<0,则平均值将抵消为0。这在常规的Z分数计算中发生,但我很惊讶,在这样的多组操作中也会发生…

我认为这非常有意义。如果E[
abc
|
def
]是给定的
def
的期望值,则在
df['zg']
中:

m1
=E[
'zg'
声音='A']=
(0.872872+0.218218-1.091089)/3
~0

m2
=E[/code>'zg'声音='B']=
(-0.725866-0.414781+1.140647)/3
~0


我认为这很有意义。如果E[
abc
|
def
]是给定的
def
的期望值,则在
df['zg']
中:

m1
=E[
'zg'
声音='A']=
(0.872872+0.218218-1.091089)/3
~0

m2
=E[/code>'zg'声音='B']=
(-0.725866-0.414781+1.140647)/3
~0


E[
'zg'
]=
(m1+m2)/2
=
(0.872872+0.218218-1.091089-0.725866-0.414781+1.140647)/6
~0

是的,这是预期行为

用花言巧语,用

具体来说,如果组
Y
是有限的,因此是可数的

在哪里

然而,通过构造,对于可能组的集合
G
Y
的所有值,每个
E[X | Y\u j]
都是
0


因此,总平均值也将为零。

是的,这是预期行为

用花言巧语,用

具体来说,如果组
Y
是有限的,因此是可数的

在哪里

然而,通过构造,对于可能组的集合
G
Y
的所有值,每个
E[X | Y\u j]
都是
0


因此,总平均值也将为零。

您是否查看了每组平均值(非标准化)?您是否查看了每组平均值(非标准化)?