如何在Pandas中按行计算排除最值后的均值(向量化方案)
如何在Pandas中按行计算排除最值后的均值(向量化方案)
给定如下DataFrame:
| col_a | col_b | col_c | col_d |
|---|---|---|---|
| -100 | 2 | 4 | 100 |
| -200 | 4 | 8 | 200 |
需要按行计算排除最小值和最大值后的均值,预期结果如下:
| col_a | col_b | col_c | col_d | mean_exc_min_max |
|---|---|---|---|---|
| -100 | 2 | 4 | 100 | 3 |
| -200 | 4 | 8 | 200 | 6 |
已知可以用df.mean(axis=1)计算行均值,但不知道如何排除最值。由于数据集规模较大,需要完全向量化的高效解决方案。
创建该DataFrame的代码:
import pandas as pd data = { "col_a": [-100, -200], "col_b": [2, 4], "col_c": [4, 8], "col_d": [100, 200], } df = pd.DataFrame(data)
解决方案
直接通过向量化操作计算:每行总和减去该行的最小值和最大值,再除以(总列数-2)——因为我们排除了两个极值。这种方法全程利用Pandas的内置向量化函数,避免循环,效率极高,适合处理大规模数据集。
代码实现:
# 新增列存储排除最值后的均值 df['mean_exc_min_max'] = (df.sum(axis=1) - df.min(axis=1) - df.max(axis=1)) / (df.shape[1] - 2)
验证结果
执行后df的输出与预期完全一致:
- 第一行:总和为
-100+2+4+100=6,减去最小值-100和最大值100,剩余6,除以4-2=2,得到3 - 第二行:总和为
-200+4+8+200=12,减去最小值-200和最大值200,剩余12,除以2得到6
内容的提问来源于stack exchange,提问作者Jossy
相关产品推荐
相关产品推荐

