gpt4 book ai didi

python - Pandas :如果多个列中的一个以上为零,则删除行

转载 作者:行者123 更新时间:2023-11-28 20:13:01 24 4
gpt4 key购买 nike

我有这样一个数据框:

     col0   col1  col2  col3
ID1 0 2 0 2
ID2 1 1 2 10
ID3 0 1 3 4

我想多次删除包含零的行。

我试过:

cols = ['col1', etc]
df.loc[:, cols].value_counts()

但这只适用于系列而不适用于数据框。

df.loc[:, cols].count(0) <= 1

只返回 bool 值。

我觉得我已经接近第二次尝试了。

最佳答案

应用条件并计算 True 值。

(df == 0).sum(1)

ID1 2
ID2 0
ID3 1
dtype: int64

df[(df == 0).sum(1) < 2]

col0 col1 col2 col3
ID2 1 1 2 10
ID3 0 1 3 4

或者,将整数转换为 bool 值并求和。更直接一点。

# df[(~df.astype(bool)).sum(1) < 2]
df[df.astype(bool).sum(1) > len(df.columns)-2] # no inversion needed

col0 col1 col2 col3
ID2 1 1 2 10
ID3 0 1 3 4

为了性能,你可以使用np.count_nonzero:

# df[np.count_nonzero(df, axis=1) > len(df.columns)-2]
df[np.count_nonzero(df.values, axis=1) > len(df.columns)-2]

col0 col1 col2 col3
ID2 1 1 2 10
ID3 0 1 3 4

df = pd.concat([df] * 10000, ignore_index=True)

%timeit df[(df == 0).sum(1) < 2]
%timeit df[df.astype(bool).sum(1) > len(df.columns)-2]
%timeit df[np.count_nonzero(df.values, axis=1) > len(df.columns)-2]

7.13 ms ± 161 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
4.28 ms ± 120 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
997 µs ± 38.2 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

关于python - Pandas :如果多个列中的一个以上为零,则删除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55660993/

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