gpt4 book ai didi

python - 组内加权 zscore

转载 作者:行者123 更新时间:2023-11-28 17:17:33 24 4
gpt4 key购买 nike

考虑以下数据框 df

np.random.seed([3,1415])
df = pd.DataFrame(dict(
S=np.random.rand(20),
W=np.random.rand(20),
G=np.random.choice(list('ABCD'), 20)
))

print(df)

G S W
0 B 0.444939 0.278735
1 D 0.407554 0.609862
2 C 0.460148 0.085823
3 B 0.465239 0.836997
4 A 0.462691 0.739635
5 A 0.016545 0.866059
6 D 0.850445 0.691271
7 C 0.817744 0.377185
8 B 0.777962 0.225146
9 C 0.757983 0.435280
10 C 0.934829 0.700900
11 A 0.831104 0.700946
12 C 0.879891 0.796487
13 A 0.926879 0.018688
14 D 0.721535 0.700566
15 D 0.117642 0.900749
16 D 0.145906 0.764869
17 C 0.199844 0.253200
18 B 0.437564 0.548054
19 A 0.100702 0.778883

我想在 'G' 定义的每个组中使用权重 'W' 执行 'S' 列的加权 zscore

为了让我们知道加权 zscore 的定义是什么,这就是您在整个集合上计算它的方式:

(df.S - (df.S * df.W).mean()) / df.S.std()

问题
最优雅的计算方法是什么?
什么是最有效的击键计算方法?
最省时的计算方法是什么?

我计算的答案是

0     1.291729
1 0.288806
2 0.394302
3 1.414926
4 0.619677
5 -0.461462
6 1.625974
7 1.645083
8 3.312825
9 1.436054
10 2.054617
11 1.512449
12 1.862456
13 1.744537
14 1.236770
15 -0.586493
16 -0.501159
17 -0.516180
18 1.246969
19 -0.257527
dtype: float64

最佳答案

给你:

>>> df.groupby('G').apply(lambda x: (x.S - (x.S * x.W).mean()) / x.S.std())
G
A 4 0.619677
5 -0.461462
11 1.512449
13 1.744537
19 -0.257527
B 0 1.291729
3 1.414926
8 3.312825
18 1.246969
C 2 0.394302
7 1.645083
9 1.436054
10 2.054617
12 1.862456
17 -0.516180
D 1 0.288806
6 1.625974
14 1.236770
15 -0.586493
16 -0.501159
Name: S, dtype: float64

我们首先对 G 中的每个组进行拆分,然后将加权 z-score 函数应用于每个组数据帧。

关于python - 组内加权 zscore,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43420249/

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