python-3.x - 删除 panda 中少于 3 个非零值的行

标签 python-3.x pandas

我想从 panda DataFrame 中删除少于 3 个非零值的行(不包括总列)。

所以现在我已经。

    year    2001 2002 2003 2004 2005 2006 2007 TOTAL
    player  
    Emma    0     0     0    0    3    4    5    12
    Max     3     5     0    0    0    0    0    8
    Josh    1     2     4    1    2    1    0    11
    Steve   0     0     0    0    3    0    0    3
    Mike    1     0     0    0    0    0    2    3

但我想要:

    year    2001 2002 2003 2004 2005 2006 2007 TOTAL
    player  
    Emma    0     0     0    0    3    4    5    12
    Josh    1     2     4    1    2    1    0    11

我正在考虑使用 for 循环,但我不确定如何实现它/它是否是解决我的问题的最佳方法。

最佳答案

Pandas
drop TOTALsum 每行的非零数

df[df.drop('TOTAL', 1).ne(0).sum(1).gt(2)]

year    2001  2002  2003  2004  2005  2006  2007  TOTAL
player                                                 
Emma       0     0     0     0     3     4     5     12
Josh       1     2     4     1     2     1     0     11

numpy
更快的解决方案

v = df.values
m = (v[:, :-1] != 0).sum(1) > 2
pd.DataFrame(v[m], df.index[m], df.columns)

year    2001  2002  2003  2004  2005  2006  2007  TOTAL
player                                                 
Emma       0     0     0     0     3     4     5     12
Josh       1     2     4     1     2     1     0     11

关于python-3.x - 删除 panda 中少于 3 个非零值的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43906035/

相关文章:

python - 使用 Pandas 加载 CSV 数据

python - 如何使用 timedelta 从 pandas 系列中选择最后一个值?

python - Pandas - 搜索术语(无论搜索术语的大小写)

python - 按值迭代多个列表

python - "Initializing"包含 python 文件的常量?

python - 选择值为 np.nonzero() 和 ~np.isnan() 的索引

python-3.x - Python 中文本 block 开头的全部大写的正则表达式

python dataframe.at 分配数据类型更改

python - 如何在 python 中围绕解析函数的闭包中创建索引

python - 如何在 seaborn 中并排绘制两个计数图?