gpt4 book ai didi

python - Pandas GroupBy 和计算 Z-Score

转载 作者:行者123 更新时间:2023-12-03 16:04:01 30 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





adding a grouped-by zscore column to a pandas dataframe

(1 个回答)


2年前关闭。




所以我有一个看起来像这样的数据框:

pd.DataFrame([[1, 10, 14], [1, 12, 14], [1, 20, 12], [1, 25, 12], [2, 18, 12], [2, 30, 14], [2, 4, 12], [2, 10, 14]], columns = ['A', 'B', 'C'])

A B C
0 1 10 14
1 1 12 14
2 1 20 12
3 1 25 12
4 2 18 12
5 2 30 14
6 2 4 12
7 2 10 14

我的目标是获得 B 列的 z 分数,相对于 A 列和 C 列的组。我知道我可以计算每组的均值和标准差
test.groupby(['A', 'C']).mean()    
B
A C
1 12 22.5
14 11.0
2 12 11.0
14 20.0

test.groupby(['A', 'C']).std()
B
A C
1 12 3.535534
14 1.414214
2 12 9.899495
14 14.142136

现在,对于 B 列中的每个项目,我想根据这些均值和标准差来计算它的 z 分数。所以第一个结果是 (10 - 11)/1.41。我觉得必须有一种方法可以在没有太多复杂性的情况下做到这一点,但我一直在思考如何进行。让我知道是否有人可以指出我正确的方向,或者我是否需要澄清任何事情!

最佳答案

transform

Mean=test.groupby(['A', 'C']).B.transform('mean')    
Std=test.groupby(['A', 'C']).B.transform('std')
然后
(test.B - Mean) / Std

一个功能 zscore来自 scipy
from scipy.stats import zscore
test.groupby(['A', 'C']).B.transform(lambda x : zscore(x,ddof=1))
Out[140]:
0 -0.707107
1 0.707107
2 -0.707107
3 0.707107
4 0.707107
5 0.707107
6 -0.707107
7 -0.707107
Name: B, dtype: float64
好的 显示我的号码 tie out hehe
(test.B - Mean) / Std ==test.groupby(['A', 'C']).B.transform(lambda x : zscore(x,ddof=1))
Out[148]:
0 True
1 True
2 True
3 True
4 True
5 True
6 True
7 True
Name: B, dtype: bool

关于python - Pandas GroupBy 和计算 Z-Score,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54907933/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com