【问题标题】:Delete rows with all the zeros elements in all columns exceptionally leaving a single non zero column in pandas DF删除所有列中所有零元素的行,异常地在 pandas DF 中留下一个非零列
【发布时间】:2019-06-30 04:00:10
【问题描述】:

我有一个有 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:
最后,我希望我的索引能够正确更新

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

希望有一个简单的方法来做操作...

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    使用iloc 选择所有没有第一列的列,比较不等于ne 并通过any 每行测试至少一个True 以通过boolean indexing 过滤,最后一个reset_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
    

    【讨论】:

    • @esakkiponraj.e - df[df.iloc[:, 1:].ne(0).any(axis=1).values].reset_index(drop=True) 工作怎么样?
    猜你喜欢
    • 2019-06-19
    • 1970-01-01
    • 1970-01-01
    • 2021-06-18
    • 2019-11-24
    • 1970-01-01
    • 1970-01-01
    • 2019-12-09
    • 2014-04-01
    相关资源
    最近更新 更多