首页 > 解决方案 > 删除所有列中所有零元素的行,异常地在 pandas DF 中留下一个非零列

问题描述

我有一个有 200 万行 *10 列的 pandas Df。我想删除所有列中的所有零元素,除了具有非零元素的单列。

前任。我的 Df 喜欢:

Índex   Time    a   b   c   d   e
0       1       0   0   0   0   0
1       2       1   2   0   0   0 
2       3       0   0   0   0   0
3       4       5   0   0   0   0  
4       5       0   0   0   0   0   
5       6       7   0   0   0   0 

我需要什么:

Índex   Time        a   b   c   d   e
    0       2       1   2   0   0   0 
    1       4       5   0   0   0   0  
    2       6       7   0   0   0   0

我的要求:
要求 1:
离开第一列(时间),它应该检查每一行中的零元素。如果所有列值都为零,则删除该特定行。
要求 2:
最后我希望我的索引能够正确更新

我尝试了什么:
我一直在看这个链接
我理解使用的逻辑,但我无法根据我的要求重现结果。

我希望有一个简单的方法来做手术......

标签: pythonpandasdataframe

解决方案


用于iloc选择所有没有 first 的列,comapre 用于不等于 by并测试每行ne至少一个by for filter by , last :Trueanyboolean indexingreset_index

df = df[df.iloc[:, 1:].ne(0).any(axis=1)].reset_index(drop=True)

替代删除列Time

df = df[df.drop('Time', axis=1).ne(0).any(axis=1)].reset_index(drop=True)

print (df)
   Time  a  b  c  d  e
0     2  1  2  0  0  0
1     4  5  0  0  0  0
2     6  7  0  0  0  0

推荐阅读