【发布时间】:2021-10-06 06:09:46
【问题描述】:
我是 Python / Numpy 的新手。目前,我正在编写代码来评估条件列表中的最佳条件/条件(条件列表中给出了多个条件)。
我知道 Numpy Select 函数,它根据条件返回从选择列表中的元素中提取的数组。
https://numpy.org/doc/stable/reference/generated/numpy.select.html
语法:numpy.select(condlist,choicelist, default = 0)
参数:
condlist : [list of bool ndarrays] 它确定从选择列表中的哪个数组获取输出元素。当满足多个条件时,使用 condlist 中遇到的第一个条件。 choicelist : [list of ndarrays] 从中获取输出元素的数组列表。它必须与 condlist 的长度相同。 默认值:[标量,可选] 当所有条件评估为 False 时插入到输出中的元素。
Return : [ndarray] 根据条件从选择列表中的元素中提取的数组。
通过使用 Numpy Select 函数,当满足多个条件时,使用 condlist 中遇到的第一个。
问题:
Numpy / Python 中是否有可用的函数,它提供来自 condlist 的 ALL SATISFIED CONDITIONS(不是 Numpy Select 函数提供的第一个满足条件)的输出?
如果这样的功能不可用,有人可以帮助构建这样的功能吗?
示例:
df = pd.DataFrame({"A": [10, 10, 20, 20], "B": [10, 0, 10, 0]})
condlist = [(df.A + df.B == 20), (df.A == 10) & (df.B == 0), (df.A == 20) & (df.B == 10), (df.A == 20) & (df.B == 0)]
choicelist = [(df.A + df.B), 'No', 'Hi', 'YES']
calculate = np.select(condlist, choicelist)
df['RESULT'] = pd.Series(calculate, index=df.index)
df
输出:
| A | B | RESULT | |
|---|---|---|---|
| 0 | 10 | 10 | 20 |
| 1 | 10 | 0 | No |
| 2 | 20 | 10 | Hi |
| 3 | 20 | 0 | 20 # Desire Output: 20, YES |
最后一个原始的,期望结果输出应该是 20, YES(作为条件 #4 (df.A == 20) & (df.B == 0) 也是 TRUE)。
参考: Numpy Select 源代码超链接如下。详情请参阅第 626 至 719 行。
https://github.com/numpy/numpy/blob/v1.21.0/numpy/lib/function_base.py#L626-L719
感谢您的考虑和支持。
热烈的问候,
Keyush
【问题讨论】:
-
这个输出会是什么样子?多个数组?参差不齐的阵列?
np.select返回一个数组,其中包含从选项中提取的值。当您想要一个在不同维度上大小不同的结果时,您极不可能找到numpy函数。快速编译的代码是围绕常规多维数组的概念设计的——就像在输入和输出中一样。 -
df = pd.DataFrame({"A": [10, 10, 20, 20], "B": [10, 0, 10, 0]}) 结果 = np.select( [(df.A + df.B == 20), (df.A == 10) & (df.B == 0), (df.A == 20) & (df.B == 10), (df.A == 20) & (df.B == 0)], [(df.A + df.B), 'No', 'No', 'YES']) df['RESULT'] = pd.Series(result, index=df.index) df Output: Last raw, RESULT output should be 20, YES (as condition #4 (df.A == 20) & (df.B == 0) also TRUE) . Numpy / Python 中是否有可用的函数,它提供来自 condlist 的 ALL SATISFIED CONDITIONS 的输出?如果这样的功能不可用,你能帮助构建这样的功能吗?
-
如果这是
pandas问题,请添加正确的标签。并将这样的代码放在问题中。 cmets 中的格式丢失。 -
我意识到格式问题。因此,我刚刚更新了我的原始问题并添加了示例。我很抱歉,因为我是这个网页的新手。
标签: python arrays list numpy indexing