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

标签 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

如果有一个使用 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/

相关文章:

python - 为什么 Python dis 模块无法反汇编这个 .pyc 文件?

python - selenium 通过 css 选择器获取元素

python - Wagtail:如何覆盖默认的 ImageEmbedHandler?

python - 使用 pandas 处理 sql 中的数据帧时内核死掉

python - 如何在数据框列中 append 值

python - 将数组传递给顺序神经网络模型

python - 连接数据帧单标签行选择返回多行

python - 如何使用 SVM 处理递归特征消除或模型训练中的字符串特征?

python - 如何使用python获取原始数据框中扩展/重采样函数的结果

r - 按每组中的最大值过滤数据框