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

2024-06-16 13:04:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧,第一行只有0作为值。 我想删除那些行。你知道吗

所以,表示df my dataframe和['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函数,那就太好了。谢谢


Tags: 数据函数代码dataframepandasdfmyall
2条回答

如果数据中的所有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行,则解决方案-使用^{}获取非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

下面是一个示例,它找到第一行不是全零,然后从该点开始选择all。应该解决您描述的问题:

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

相关问题 更多 >