gpt4 book ai didi

python - 在Pandas中按组计算加权平均值时如何忽略组中的最小值和最大值

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

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

pd.DataFrame({'A': ['C1', 'C2', 'C3', 'C4', 'C5', 'C6', 'C7', 'C8', 'C9', 'C10'],
...: 'B': ['A', 'A', 'A', 'B', 'B', 'B', 'B', 'C', 'C', 'C'],
...: 'W': [0.5, 0.2, 0.3, 0.2, 0.1, 0.4, 0.3, 0.4, 0.5, 0.1],
...: 'V': [9, 1, 7, 4, 3, 5, 2, 6, 8, 10]})
Out[9]:
A B W V
0 C1 A 0.5 9
1 C2 A 0.2 1
2 C3 A 0.3 7
3 C4 B 0.2 4
4 C5 B 0.1 3
5 C6 B 0.4 5
6 C7 B 0.3 2
7 C8 C 0.4 6
8 C9 C 0.5 8
9 C10 C 0.1 10
我想在“B”列中按组计算加权平均值,忽略最小值和最大值(“V”列),其中
列 W = 重量
列 V = 值
要考虑所有值计算每个组的简单平均值,我可以这样做:
df['mean'] = df.groupby('B').apply(lambda x: (x.V * (x.W / x.W.sum())).sum()).reindex(df.B).values
print(df)
A B W V mean
0 C1 A 0.5 9 6.8
1 C2 A 0.2 1 6.8
2 C3 A 0.3 7 6.8
3 C4 B 0.2 4 3.7
4 C5 B 0.1 3 3.7
5 C6 B 0.4 5 3.7
6 C7 B 0.3 2 3.7
7 C8 C 0.4 6 7.4
8 C9 C 0.5 8 7.4
9 C10 C 0.1 10 7.4
但是,我想忽略每组中的最大值和最小值以按组计算平均值。结果应该是这样的
     A  B    W   V  meanNoMinMax
0 C1 A 0.5 9 7.0
1 C2 A 0.2 1 7.0
2 C3 A 0.3 7 7.0
3 C4 B 0.2 4 3.666667
4 C5 B 0.1 3 3.666667
5 C6 B 0.4 5 3.666667
6 C7 B 0.3 2 3.666667
7 C8 C 0.4 6 8.0
8 C9 C 0.5 8 8.0
9 C10 C 0.1 10 8.0
如何用 1 行(或很少行)代码实现这一点?
逻辑
每组忽略的 V 中的最小值和最大值将给出下表来计算平均忽略每组的最小值和最大值
     A  B    W   V
1 C3 A 0.3 7
3 C4 B 0.2 4
4 C5 B 0.1 3
8 C9 C 0.5 8

最佳答案

添加条件并修复您的代码

df['mean'] = df.groupby('B').apply(lambda x: (x.V * (x.W[(x.V!=x.V.max()) & (x.V!=x.V.min())] / x.W[(x.V!=x.V.max()) & (x.V!=x.V.min())].sum())).sum()).reindex(df.B).values
df
Out[293]:
A B W V mean
0 C1 A 0.5 9 7.000000
1 C2 A 0.2 1 7.000000
2 C3 A 0.3 7 7.000000
3 C4 B 0.2 4 3.666667
4 C5 B 0.1 3 3.666667
5 C6 B 0.4 5 3.666667
6 C7 B 0.3 2 3.666667
7 C8 C 0.4 6 8.000000
8 C9 C 0.5 8 8.000000
9 C10 C 0.1 10 8.000000

关于python - 在Pandas中按组计算加权平均值时如何忽略组中的最小值和最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63676201/

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