在pandas中,如何用最后一个不超过4行的非零值替换所有零值,而不使用for循环



如果我的一个数据帧列看起来像这样:

5
0
0
0
0
0
6
0

它应该看起来像这个

5
5
5
5
5
0
6
6

我知道如何使用循环和计数器,但我想知道如何在没有for循环的情况下进行操作?

您甚至不需要掩码,有一个方法replace允许您指定limitmethod='ffill'。通过Nan也会转换为不需要的浮点。

import pandas as pd
df = pd.DataFrame({'a': [5, 0, 0, 0, 0, 0, 6, 0]})
# Replace 0s with forward fill and limit set to 4 elements
df2 = df.replace(0, limit=4, method='ffill')
print(df)
a
0  5
1  5
2  5
3  5
4  5
5  0
6  6
7  6

如果值为0,则可以使用mask来获得nan,将ffill与极限参数一起使用,其余的fillna与0 一起使用

s = pd.Series([5,0,0,0,0,0,6,0])
s_ = s.mask(s.eq(0)).ffill(limit=4).fillna(0)
print (s_)
0    5.0
1    5.0
2    5.0
3    5.0
4    5.0
5    0.0
6    6.0
7    6.0
dtype: float64

最新更新