我有一组具有零值头行和尾行的数据帧。我想删除这些零值行并保持它们之间的范围。
例如,给定这个 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))]
