pandas - 在 Pandas 中用 NaN 替换连续的 0

标签 pandas

我想通过仅替换数据框中连续的 0 来清理一些数据

给定:

import pandas as pd
import numpy as np
d = [[1,np.NaN,3,4],[2,0,0,np.NaN],[3,np.NaN,0,0],[4,np.NaN,0,0]]
df = pd.DataFrame(d, columns=['a', 'b', 'c', 'd'])
df
   a    b  c    d
0  1  NaN  3  4.0
1  2  0.0  0  NaN
2  3  NaN  0  0.0
3  4  NaN  0  0.0

期望的结果应该是:

   a    b  c    d
0  1  NaN  3   4.0
1  2  0.0  NaN NaN
2  3  NaN  NaN NaN
3  4  NaN  NaN NaN

其中 c 列和 d 列受到影响,但 b 列不受影响,因为它只有 1 个零(而不是连续的 0)。

我已经尝试过这个答案: Replacing more than n consecutive values in Pandas DataFrame column

这是正确的,但解决方案将第一个 0 保留在给定列中,这在我的情况下是不需要的。

最佳答案

让我们用maskshift

df=df.mask((df.shift().eq(df)|df.eq(df.shift(-1)))&(df==0))
Out[469]: 
   a    b    c    d
0  1  NaN  3.0  4.0
1  2  0.0  NaN  NaN
2  3  NaN  NaN  NaN
3  4  NaN  NaN  NaN

关于pandas - 在 Pandas 中用 NaN 替换连续的 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61752420/

相关文章:

python - 按新列分组而不添加它

python - 如何计算 Pandas 中最长的不间断序列

python - 在 Pandas 数据框中的每第 N 行之后插入空行

python - if else 条件在 df.loc pandas 内

python - 提高多个 pandas 列逻辑的程序可读性

python - pandas - Groupby 两个函数

python - 在这种情况下如何使用泛函?

python - 如何在 pandas 中创建动态 bin

python - 在 Pandas 中按条件选择列范围

python - 如何从 pandas DataFrame 列中提取美元金额