You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何计算Pandas DataFrame每行剔除最值后的标准差?(矢量化需求)

问题

给定如下DataFrame:

abcdesd
-100236041
75-5091302

需要计算其中的sd列,即每行剔除最大值和最小值后的标准差。实际DataFrame包含数百万行,因此需要矢量化的高效方案。

复现代码:

import pandas as pd

df = pd.DataFrame(
    {"a": [-100, 7], "b": [2, 5], "c": [3, -50], "d": [60, 9], "e": [4, 130]}
)
高效矢量化解决方案

针对百万级行数据,必须避免逐行循环,可利用pandas与numpy的矢量化特性实现高效处理:

import numpy as np

# 获取每行的最大值和最小值
row_max = df.max(axis=1)
row_min = df.min(axis=1)

# 将每行的极值替换为NaN(通过广播匹配维度)
filtered_data = df.mask((df == row_max[:, np.newaxis]) | (df == row_min[:, np.newaxis]))

# 计算每行剔除极值后的样本标准差(ddof=1对应示例结果)
df['sd'] = filtered_data.std(axis=1, ddof=1)

结果验证

运行代码后,df['sd']的输出为:

0    1.0
1    2.0
Name: sd, dtype: float64

完全匹配示例中的预期值。

性能说明

  • 全程采用底层优化的矢量化操作,无显式循环,处理百万级数据效率极高
  • mask与std均为pandas内置的高性能API,基于numpy实现,远快于逐行遍历逻辑

内容的提问来源于stack exchange,提问作者Jossy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 21:55:01