【发布时间】:2020-09-11 09:39:52
【问题描述】:
我正在使用 np.select() 来构造一个值为 1、-1 或 0 的 ndarray,具体取决于某些条件。有可能这些都不会满足,所以我需要一个默认值。如果有意义的话,我希望这个值是数组在前一个索引中保存的值。我的幼稚代码在名为“total”的 DataFrame 的某些列上运行并引发错误,如下所示:
condlist = [total.ratios > total.s_entry, total.ratios < total.b_entry, (total.ratios > total.b_entry) & (total.ratios < total.s_entry)]
choicelist = (-1, 1, 0)
pos1 = pd.Series(np.select(condlist, choicelist, pos1))
有没有办法做我所要求的?例如,让数组开始
1
1
0
-1
-1
然后第六个元素不满足任何条件,所以它的值默认为-1,因为它是数组的最新值?
【问题讨论】:
-
np.select遍历两个列表:zip(choicelist, condlist),并分配res[cond]=value。它首先将default放入res,然后从末尾开始迭代,因此第一个条件具有优先权。它不会遍历数组的“行”。对于迭代系列元素的行为,select不是您想要的工具。 -
那么有没有另一种方法来做我所要求的,而不使用 for 循环?
标签: python pandas numpy numpy-ndarray