Skip to main content
 首页 » 编程设计

python之从 DataFrame 中删除零值头行和尾行

2025年05月04日11shanyou

我有一组具有零值头行和尾行的数据帧。我想删除这些零值行并保持它们之间的范围。

例如,给定这个 DataFrame:

   x 
0  0 
1  0 
2  1  
3  0 
4  3 
5  1 
6  0 
7  0 

我想要一个返回这个的函数:

   x 
2  1  
3  0 
4  3 
5  1 

请注意,第 3 行的零值并未丢失。我不想删除所有零,只删除头部和尾部。 Pandas 如何做到这一点?

请您参考如下方法:

使用:

df = df[df['x'].cumsum().mul(df['x'].iloc[::-1].cumsum()).ne(0)] 
print (df) 
   x 
2  1 
3  0 
4  3 
5  1 

解释:

获取cumsum栏目:

print (df['x'].cumsum()) 
0    0 
1    0 
2    1 
3    1 
4    4 
5    5 
6    5 
7    5 
Name: x, dtype: int64 

反转列并再次cumsum:

print (df['x'].iloc[::-1].cumsum()) 
7    0 
6    0 
5    1 
4    4 
3    4 
2    5 
1    5 
0    5 
Name: x, dtype: int64 

乘以 Series.mul :

print (df['x'].cumsum().mul(df['x'].iloc[::-1].cumsum())) 
0     0 
1     0 
2     5 
3     4 
4    16 
5     5 
6     0 
7     0 
Name: x, dtype: int64 

并检查不等于 ne (!=) 的 0:

print (df['x'].cumsum().mul(df['x'].iloc[::-1].cumsum()).ne(0)) 
0    False 
1    False 
2     True 
3     True 
4     True 
5     True 
6    False 
7    False 
Name: x, dtype: bool 

最后过滤条件 boolean indexing .

谢谢@Wen 的另一种解决方案:

df[(df.x.eq(0).cumprod().eq(0))&(df.x[::-1].eq(0).cumprod().eq(0))]