删除所有列中所有零元素的行,在熊猫DF中例外地留下单个非零列

时间:2019-02-06 08:44:56

标签: python pandas dataframe

我有一个熊猫Df,具有200万行* 10列。 我想删除除非零元素的单列以外的所有列的所有零元素。

例如我的Df喜欢:

  exec {'test':
    command     => '/usr/bin/hammer proxy refresh-features --name $(hostname)',
    environment => ["HOME=/root"],
    refreshonly => true,
  }

我需要什么:

DO $$ 
DECLARE   
   l_lob_id OID;
   r record; BEGIN

  for r in
    select data, filename from bytea_table

   LOOP
    l_lob_id:=lo_from_bytea(0,r.data);
    PERFORM lo_export(l_lob_id,'/home/...'||r.filename);
    PERFORM lo_unlink(l_lob_id);   
    END LOOP;

END; $$

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

我尝试过的事情:
我一直在看this link
我了解所使用的逻辑,但无法根据需要重现结果。

我希望会有一个简单的方法来进行操作...

1 个答案:

答案 0 :(得分:2)

使用iloc来选择所有没有第一列的列,以comapre表示不等于ne,并通过any测试每行至少一个True来过滤{{3 }},最后boolean indexing

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