假设我有一个数据帧:
对于数据帧中的每个索引,我想计算所属组(由组ID指定)在不包含该索引的情况下的平均值。
我开始使用两个for循环,通过使用apply函数提高了速度。
所需输出为:
df = pd.DataFrame(data={'group_id': [1, 1, 1, 1, 2, 2, 2, 2],
'A': [24.0, 12.0, 23.0, 22.0, 44.0, 55.0, 52.0, 48.0],
'B': [23.0, 15.0, 22.0, 21.0, 65.0, 53.0, 53.0, 54.0]})
对于数据帧中的每个索引,我想计算所属组(由组ID指定)在不包含该索引的情况下的平均值。
我开始使用两个for循环,通过使用apply函数提高了速度。
def func(x):
df = x.copy()
for row in x.itertuples():
df.loc[row[0], :] = x.loc[x.index != row[0], :].mean()
return df
df.groupby('group_id')['A', 'B'].apply(func)
所需输出为:
A B
group_id
1 0 19.000000 19.333333
1 23.000000 22.000000
2 19.333333 19.666667
3 19.666667 20.000000
2 4 51.666667 53.333333
5 48.000000 57.333333
6 49.000000 57.333333
7 50.333333 57.000000
有没有更快的方法来计算这个?