我有一个大型时间序列 df(250 万行),其中给定行中包含 0 个值,其中一些是合法的。但是,如果重复连续出现零值,我想将它们从我的 df 中删除。
示例:
A 列包含[1,2,3,0,4,5,0,0,0,1,2,3,0,8,8,0,0,0,0,9]
我想从中间删除 [0,0,0]
和 [0,0,0,0]
并保留剩余的 0
创建一个新的 df [1,2,3,0,4,5,1,2,3,0,8,8,9]
。
删除之前零值的长度是必须设置的参数 - 在本例中> 2。
在 pandas 中是否有一种聪明的方法来做到这一点?
最佳答案
如果该行为 0 并且同一列中的上一行或下一行为 0,则您似乎想要删除该行。您可以使用 shift
查找上一个和下一个值并与当前值进行比较值如下:
result_df = df[~(((df.ColA.shift(-1) == 0) & (df.ColA == 0)) | ((df.ColA.shift(1) == 0) & (df.ColA == 0)))]
print(result_df)
结果:
ColA
0 1
1 2
2 3
3 0
4 4
5 5
9 1
10 2
11 3
12 0
13 8
14 8
19 9
连续更新超过2次
以下示例位于 link ,添加新列来跟踪连续发生的情况,然后检查它以进行过滤:
# https://stackoverflow.com/a/37934721/5916727
df['consecutive'] = df.ColA.groupby((df.ColA != df.ColA.shift()).cumsum()).transform('size')
df[~((df.consecutive>10) & (df.ColA==0))]
关于python - Pandas - 仅删除等于零的连续行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49725407/