gpt4 book ai didi

python - 当找到 True 时,用 False 填充 pandas 的下 N 行

转载 作者:太空宇宙 更新时间:2023-11-04 03:43:40 25 4
gpt4 key购买 nike

我有一个 pandas 系列,里面有一堆 bool 值,我想过滤一组 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 还是 False,除非您评估所有先前的元素。

但是,正如 Yair Daon 所建议的那样,只考虑 True 值而不是遍历整个数组是有意义的,因为如果您处理大型数据集,这肯定会节省您的时间。

然后可以遍历True值的位置,对于距离上一个'good'位置N个单位以内的,将相应的值设置为False。然后将“好”位置更新为下一个 True 位置,该位置距前一个位置超过 N 个单位。

input = np.array([True, True, True, True, False, False, False, True, True, 
False, False, False, True, True, True, True, False, True])

获取所有真实位置:

true_locs = np.where(input == True)[0]

初始化好位置,以便始终选择第一个 True 位置:

last_true_loc = - N - 1

遍历剩余的True位置:

for loc in true_locs:
if loc > last_true_loc + N:
last_true_loc = loc
else:
input[loc] = False

结果(N = 5):

print input
[ True False False False False False False True False False False False
False True False False False False]

关于python - 当找到 True 时,用 False 填充 pandas 的下 N 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24920873/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com