python - Pandas - 仅删除等于零的连续行

标签 python pandas

我有一个大型时间序列 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/

相关文章:

python - dataframe.describe() 抑制科学记数法

python - 如何在 python 中检查文件是否打开以在 Windows 上写入?

python - Python输入 “-”

Python查找两个不同长度的数据框列的部分匹配

Pandas:大对节点之间的最短路径长度

python - 如何计算 pandas 数据框中的标准差?

python - 在 Sphinx 中交叉引用 Python 对象有什么要求?

python - 打印 Pandas 数据框中每一列的唯一值

python - 如何从 python 中的列表中获取第一个值和最后一个值?

python - 将多个 CSV 文件导入 pandas 并连接到一个 DataFrame