我有以下数据框:
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解决方案)
答案 0 :(得分:30)
您可以将replace
与method='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值替换为以前的值。