我有一个带有一堆布尔值的pandas系列,我想筛选True
值的组。换句话说,我想实现这个:
def filter_noise_vals(series, N):
# series: pandas.core.series.Series object with only True and False values
# N: param that tells method how many subsequent True vals to set to False
for val in series:
if val: # value is true
# set next N values in Series to False
我相信有一种方法可以做到这一点而不循环,但我不太明白。如果没有,最好的方法是什么?你知道吗
对此的伪代码解释是:每次找到True
时,将序列中的下一个N
项设置为False
。你知道吗
输入和输出示例:
(N = 5) (N = 2)
INPUT: OUTPUT: INPUT: OUTPUT:
================= =================
True True False False
True False False False
True False True True
True False True False
False False True False
False False True True
False False False False
True True False False
True False True True
False False False False
False False True False
False False True True
True False False False
True True True False
True False False False
True False True True
False False True False
True False True False
如果
True
是稠密的,我会说你最好的办法可能就是循环。如果True
是稀疏的,那么最好找到True
的位置并在这些位置上循环。numpy
可能会有帮助。你知道吗现在在列表
a
上循环,只替换其中出现的元素。你知道吗我怀疑这件事不需要一个循环就能完成。直觉是,对于任何一个给定的元素,你都不知道它是真是假,除非你评估了前面所有的元素。你知道吗
但是,正如Yair Daon所建议的那样,只考虑真值是有意义的,而不是遍历整个数组,因为如果使用大型数据集,这肯定会节省时间。你知道吗
然后您可以遍历真值的位置,对于那些距离最后一个“好”位置在N个单位之内的值,将相应的值设置为False。然后将“好”位置更新为下一个真实位置,该位置与前一个位置的距离超过N个单位。你知道吗
获取所有真实位置:
初始化好位置,以便始终选择第一个真实位置:
遍历其余的真实位置:
结果(N=5):
相关问题 更多 >
编程相关推荐