【发布时间】:2022-01-19 14:03:07
【问题描述】:
问题:
假设有一个 Pandas 数据框:
d = {'A': [0.1, 0.4, 0.2, 0.2],
'B': [0.7, 0.3, 0.2, 0.9],
'Z': [0.5, 0.3, 0.4, 0.6],
'sth': ['abc', 'something', 'unimportant', 'x']}
df = pd.DataFrame(data = d)
df
| A | B | Z | sth | |
|---|---|---|---|---|
| 0 | 0.1 | 0.7 | 0.5 | "abc" |
| 1 | 0.4 | 0.3 | 0.3 | "something" |
| 2 | 0.2 | 0.2 | 0.4 | "unimportant" |
| 3 | 0.2 | 0.9 | 0.6 | "x" |
thresholds = {'A': 0.5, 'B':0.8, 'Z': 0.3}
我想为每一行找到一个具有True的掩码,其中该行的最高值低于为该类定义的阈值。
对于给定的示例,正确的掩码应该是:
[ True, True, False, False]
解释:
- 行
0。首先找到该行中的最大值max([0.1,0.7,0.5]) = 0.7。请注意,0.7位于B列中。将此值与列B的阈值 (0.8) 进行比较。0.8 > 0.7,所以结果为 True。 -
1行在A列具有最高值,因为max([0.4,0.3,0.3]) = 0.4,类A的阈值为0.5,因此True -
2行在Z列具有最高值,因为max([0.2,0.2,0.4]) = 0.4,类Z的阈值为0.3,因此False -
3行在B列具有最高值,因为max([0.2,0.9,0.6]) = 0.9,类B的阈值为0.8。因为0.8 < 0.9这一行是False
【问题讨论】:
-
在您的示例数据中,第 0 行的 Z 值为
0.5,这不会高于阈值并作为示例[ False, True, False] -
好点。不,因为我分析每一行,而不是每一列。我看到我的问题的措辞可能有点令人困惑。 ;S