排除最小值和最大值
一种快速的方法是利用 NumPy 对每行数据进行排序,然后排除首尾值,并计算标准差:
```python
df['sd'] = np.sort(df.values, axis=1)[:, 1:-1].std(axis=1, ddof=1)
此处通过 np.sort
函数对 DataFrame df
按行排序后,取除了每行的第一个(最小值)和最后一个元素(最大值),再沿轴1(即按列)计算剩余数值的标准差。
处理重复的最小值和最大值(排除所有重复)
如果你的数据中可能存在多个相同的最小值或最大值,并希望排除所有这些重复的极值,可以先计算一个掩码:
```python
m1 = df.ne(df.min(axis=1), axis=0)
m2 = df.ne(df.max(axis=1), axis=0)
df['sd'] = df.where(m1 & m2).std(axis=1)
这里首先计算出两个布尔掩码 m1
和 m2
,分别表示每行中不等于该行最小值和最大值的元素位置。然后使用 where
函数基于这两个掩码过滤掉所有重复出现的最小值和最大值,并计算剩余元素的标准差。
输出结果如下:
| | a | b | c | d | e | sd |
|---|-----|---|-----|-----|-----|----|
| 0 | -100| 2| 3 | 60 | 4 | 1.0|
| 1 | 7 | 5| -50 | 9 | 130 | 2.0|
请注意,上述代码片段以 Markdown 格式呈现,但实际执行时应转换为 Python 代码。