假设我有一个由0和1组成的Pandas系列,但这可以用于numpy数组或任何可迭代对象。我想创建一个公式,它接受一个数组和一个输入n,然后返回一个新的系列,该系列在第n个索引处包含1,直到每次原始系列中至少有一个1。下面是一个示例:
array = np.array([0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1])
> preceding_indices_function(array, 2)
np.array([0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1])
每当输入数组中有1时,它前面的两个索引都用1填充,而不管原始数组中的该索引是0还是1。
我真的很感激你的帮助。谢谢!
5条答案
按热度按时间vc9ivgsu1#
对
np.convolve
使用卷积:输出:
6kkfgxo02#
除非你不想使用
numpy
,mozway的transpose
是最好的解决方案。但是由于已经给出了几次迭代,我添加了基于itertools的解决方案
zip_longest
与经典的zip
相同,但如果迭代器有不同的“长度”,则迭代次数是最长的一个,完成的迭代器将返回None
。除非您在zip_longest
中添加了一个fillvalue
参数。因此,这里
itertools.zip_longest(array, array[1:], array[2:], fillvalue=0)
给出了一个三元组(a,B,c)的序列,具有3个后续元素(a是当前元素,b是下一个,c是后一个,如果没有任何下一个元素或下一个之后的元素,则b和c为0)。因此,从那里,一个简单的理解建立一个
[a or b or c]
的列表,如果a,b或c是1,则为1,否则为0。lrl1mhuk3#
r6l8ljro4#
如果a是一个列表,这个函数就可以工作,应该也可以和其他迭代对象一起工作:
sqyvllje5#
我得到了一个与另一个类似但在我看来稍微简单一些的解决方案: