gpt4 book ai didi

python - Pandas : zscore among the groups

转载 作者:行者123 更新时间:2023-11-30 21:58:09 25 4
gpt4 key购买 nike

我正在尝试查找各组中值的 z 分数,例如在以下数据中

df:

GROUP VALUE
1 5
2 2
1 10
2 20
1 7

在第 1 组中,值是 5、10、7。所以现在我只在他们的组中查找他们的 zscore

Sample Desired Output: 

GROUP VALUE Z_SCORE
1 5 0.5
2 2 0.01
1 10 7
2 20 8.3
1 7 1.3

上面的 zscore 并不是真正的计算值,只是一种表示。

我正在尝试以下操作

def z_score(x):
z = np.abs(stats.zscore(x))
return z

df['Z_SCORE'] = df.groupby(['GROUP'])['Value'].apply(z_score)

但是没能成功。我怎样才能实现这个目标?

最佳答案

使用GroupBy.transform而是apply将numpy数组正确转换为每个组的新Series:

from  scipy.stats import zscore

def z_score(x):
z = np.abs(zscore(x))
return z

df['Z_SCORE'] = df.groupby('GROUP')['VALUE'].transform(z_score)

print (df)
GROUP VALUE Z_SCORE
0 1 5 1.135550
1 2 2 1.000000
2 1 10 1.297771
3 2 20 1.000000
4 1 7 0.162221

解决方案 GroupBy.apply是可能的,但有必要更改返回 Series 的函数以及每个组的索引:

def z_score(x):
z = np.abs(zscore(x))
return pd.Series(z, index=x.index)


df['Z_SCORE'] = df.groupby('GROUP')['VALUE'].apply(z_score)
print (df)
GROUP VALUE Z_SCORE
0 1 5 1.135550
1 2 2 1.000000
2 1 10 1.297771
3 2 20 1.000000
4 1 7 0.162221

关于python - Pandas : zscore among the groups,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55021877/

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