繁体   English   中英

熊猫用以前的非零值替换零

[英]pandas replace zeros with previous non zero value

我有以下数据框:

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'])

如何使用熊猫用以前的非零值填充零? 是否有不只是“NaN”的fillna?

输出应如下所示:

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

(这个问题在这里之前被问到用最后一个非零值填充 1d numpy 数组的零值,但他专门要求一个 numpy 解决方案)

您可以使用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)

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM