【发布时间】:2019-02-06 22:44:55
【问题描述】:
我有一个一维“来自”数组(称为 "frm"),其中包含带有相关布尔掩码数组的值:"面具"(与frm的形状相同)。然后我有第三个“替换”数组:"repl",也是 1D,但长度比其他两个短。
有了这些,我想生成一个包含 frm 的新数组 ("to") > values except where mask==True 在这种情况下,它应该按顺序从 repl em>。 (注意 mask 中 True 元素的数量等于 repl 的长度)。
我正在寻找一种“聪明”的 numpy 方式来实现这一点?我查看了 np.where、np.take、np.select、np.choose 等方法,但没有似乎“符合要求”?
“切入代码”,这就是我目前所拥有的。它工作正常,但似乎不是“Numpythonic”? (或者甚至是 Pythonic)
frm = [1, 2, 3, 4, 5]
mask = [False, True, False, True, True]
repl = [200, 400, 500]
i = 0; to = []
for f,m in zip(frm,mask):
if m:
to.append(repl[i])
i += 1
else:
to.append(f)
print(to)
产量:[1, 200, 3, 400, 500]
(背景:我需要这样做的原因是因为我是 Pandas pd.Dataframe 类的子类,并且需要列/索引的“设置器”。由于 pd.Index 不能“切片索引”,我需要先复制索引/列数组,根据掩码替换副本中的一些元素,然后使用 setter em> 设置完整的新值。如果有人知道更优雅的解决方案,请告诉我)。
【问题讨论】:
标签: python arrays pandas numpy indexing