pandas用以前的非零值替换零

时间:2015-10-21 13:59:09

标签: python pandas

我有以下数据框:

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"?

输出应如下所示:

[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解决方案)

2 个答案:

答案 0 :(得分:30)

您可以将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 :(得分:0)

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

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

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

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