繁体   English   中英

Pandas - 如何在数据帧的任何行中找到 6 个零的序列,并将其替换为 NaN?

[英]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)

Numpy 切片分配

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM