Python 熊猫-如何在数据帧的任何一行中找到6个零的序列,并将其替换为NaN?
如何查找包含6个零(在相邻列中)的数据帧中的每一行,Python 熊猫-如何在数据帧的任何一行中找到6个零的序列,并将其替换为NaN?,python,pandas,dataframe,Python,Pandas,Dataframe,如何查找包含6个零(在相邻列中)的数据帧中的每一行, 然后,为了将这6个零替换为Nan?我们可以对Numpy函数进行折磨,以获得一些聪明的方法来实现这一点。但使用Numba进行循环更简单,也可能更有效 import numpy as np import pandas as pd from numba import njit 安装程序 麻木 Numpy切片分配 np.random.seed([3, 14]) df = pd.DataFrame( np.random.randint(2
然后,为了将这6个零替换为Nan?我们可以对Numpy函数进行折磨,以获得一些聪明的方法来实现这一点。但使用Numba进行循环更简单,也可能更有效
import numpy as np
import pandas as pd
from numba import njit
安装程序
麻木
Numpy切片分配
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