[英]Pandas - how to find a sequence of 6 zero in any row in a data frame, and replace it to NaN?
如何找到包含 6 个零(在相邻列中)的数据框中的每一行,然后将这 6 个零替换为 Nan?
我们可以折磨 Numpy 函数来获得一些聪明的方法来做到这一点。 但是使用 Numba 循环更简单,也可能更有效。
import numpy as np
import pandas as pd
from numba import njit
np.random.seed([3, 14])
df = pd.DataFrame(
np.random.randint(2, size=(100_000, 20)),
columns=[*'ABCDEFGHIJKLMNOPQRST']
)
@njit
def replace_too_many_zeros(a, k):
i = [0][:0]
j = [0][:0]
for i_, row in enumerate(a):
count_zeros = 0
for j_, col in enumerate(row):
if col == 0:
count_zeros += 1
else:
if count_zeros >= k:
j += list(range(j_ - count_zeros, j_))
i += [i_] * count_zeros
count_zeros = 0
return np.array(i), np.array(j)
a = df.to_numpy()
i, j = replace_too_many_zeros(a, 6)
a[i, j] = np.nan
df.loc[:] = a
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.