如何有效地删除仅包含0作为值的前导行?

时间:2019-09-09 10:15:55

标签: python pandas dataframe

我有一个pandas数据框,第一行的值只有零。 我想删除那些行。

因此,以df表示我的数据框,并以['a','b','c']列表示。我尝试了以下代码。

df[(df[['a', 'b', 'c']] != 0).all(axis=1)]

但是它也会打开以下数据框:

a b c
0 0 0
0 0 0
1 0 0
0 0 0
2 3 5
4 5 6
0 0 0
1 1 1 

进入这个:

a b c
1 0 0
2 3 5
4 5 6
1 1 1

那不是我想要的。我只想专注于领先的行。所以,我想拥有:

a b c
1 0 0
0 0 0
2 3 5
4 5 6 
0 0 0
1 1 1

拥有使用熊猫函数的简单有效的解决方案将是非常不错的。谢谢

2 个答案:

答案 0 :(得分:1)

这里是一个示例,该示例找到不是所有零的 的第一行,然后从该点开始选择所有的零。应该解决您所描述的问题:

ix_first_valid = df[(df != 0).any(axis=1)].index[0]
df[ix_first_valid:]

答案 1 :(得分:1)

如果数据中的所有((ClientResponse)ReflectionTestUtils.getField(builder.get(), "context")).getHeaders()行都可以使用常规解决方案-首先使用0进行累加,然后测试每行中的任何cummsum

True

如果数据中至少有一个非df1 = df[(df[['a', 'b', 'c']] != 0).cumsum().any(1)] print (df1) a b c 2 1 0 0 3 0 0 0 4 2 3 5 5 4 5 6 6 0 0 0 7 1 1 1 行,请使用-Series.idxmax获取非0行的第一个值:

0