gpt4 book ai didi

Python Pandas 计算不包括当前组的标准偏差,带有矢量化解决方案

转载 作者:行者123 更新时间:2023-12-05 05:30:56 28 4
gpt4 key购买 nike

所以我想使用 groupby 计算不包括当前组的标准偏差。这是一个数据示例:

import pandas as pd
df = pd.DataFrame ({
'group' : ['A','A','A','A','A','A','B','B','B','B','B','B'],
'team' : ['1','1','2','2','3','3','1','1','2','2','3','3',]
'value' : [1,2,5,7,2,3,7,8,8,9,6,4]
})

例如,对于 A 组 1 队,我想计算 2 队和 3 队的标准偏差,对于 A 组 2 队,我想计算 1 组和 3 组的标准偏差,依此类推。

我设法使用 groupby 和 apply 来完成它,但是当它用于具有数百万行的真实数据时,它花费的时间太长了。所以我正在寻找矢量化解决方案。

def std(row, data):
data = data.loc[data['group']==row['group]]
return data.groupby(['team']).filter(lambda x:(x['tool]!=row['team']).all())['value'].std()
df['std_exclude'] = df.apply(lambda x: std(data=df),axis=1)

最佳答案

groupteam组合成一个列表后,你可以使用transform:

df['std'] = (df.assign(new=df[['group', 'team']].values.tolist())['new'].transform(
lambda x: df[df['group'].eq(x[0]) & df['team'].ne(x[1])]['value'].std()))

输出:

group team value    std
0 A 1 1 2.217356
1 A 1 2 2.217356
2 A 2 5 0.816497
3 A 2 7 0.816497
4 A 3 2 2.753785
5 A 3 3 2.753785
6 B 1 7 2.217356
7 B 1 8 2.217356
8 B 2 8 1.707825
9 B 2 9 1.707825
10 B 3 6 0.816497
11 B 3 4 0.816497

不同的 groups 中有一些相同的 std 值,但您可以验证它们的 std 值确实相等。

关于Python Pandas 计算不包括当前组的标准偏差,带有矢量化解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74508088/

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