【问题标题】:pandas replace zeros with previous non zero value熊猫用以前的非零值替换零
【发布时间】:2016-01-20 13:42:19
【问题描述】:

我有以下数据框:

index = range(14)
data = [1, 0, 0, 2, 0, 4, 6, 8, 0, 0, 0, 0, 2, 1]
df = pd.DataFrame(data=data, index=index, columns = ['A'])

如何使用 pandas 用之前的非零值填充零?是否有一个不只是“NaN”的fillna?

输出应如下所示:

[1, 1, 1, 2, 2, 4, 6, 8, 8, 8, 8, 8, 2, 1]

(这个问题之前在这里问过Fill zero values of 1d numpy array with last non-zero values,但他专门要求一个 numpy 解决方案)

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    这是上一个答案的更好答案,因为上一个答案返回一个隐藏所有零值的数据框。

    相反,如果您使用以下代码行 -

    df['A'].mask(df['A'] == 0).ffill(downcast='infer')
    

    然后这解决了问题。它将所有 0 值替换为以前的值。

    【讨论】:

      【解决方案2】:

      您可以将replacemethod='ffill' 一起使用

      In [87]: df['A'].replace(to_replace=0, method='ffill')
      Out[87]:
      0     1
      1     1
      2     1
      3     2
      4     2
      5     4
      6     6
      7     8
      8     8
      9     8
      10    8
      11    8
      12    2
      13    1
      Name: A, dtype: int64
      

      要获取 numpy 数组,请使用 values

      In [88]: df['A'].replace(to_replace=0, method='ffill').values
      Out[88]: array([1, 1, 1, 2, 2, 4, 6, 8, 8, 8, 8, 8, 2, 1], dtype=int64)
      

      【讨论】:

      • 如果想用另一个值替换,比如 1 do df['A'].replace(to_replace=0,value = 1)
      • 这不是替换数据帧中的 0 值,而是排除这些数据帧值并返回数据帧的其余部分。有人可以提出更好的选择吗?
      猜你喜欢
      • 2015-08-24
      • 1970-01-01
      • 2020-04-05
      • 1970-01-01
      • 1970-01-01
      • 2018-01-05
      • 2016-03-06
      • 1970-01-01
      • 2013-05-31
      相关资源
      最近更新 更多