我有一个 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
如果有一个使用 pandas 函数的简单而高效的解决方案,那就太好了。谢谢
最佳答案
如果数据中的所有 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
如果数据中至少有一个非 0
行的解决方案 - 使用 Series.idxmax
获取非 0
行的第一个值:
df1 = df.iloc[(df[['a', 'b', 'c']] != 0).any(axis=1).idxmax():]
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
关于python - 如何有效删除仅包含 0 作为值的前导行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57851986/