每个零值后的 Pandas 常量值

Die*_*nig 5 python numpy pandas

假设我有以下数据框:

    values
0      4
1      0
2      2
3      3
4      0
5      8
6      5
7      1
8      0
9      4
10     7
Run Code Online (Sandbox Code Playgroud)

我想找到一个 pandas 向量化函数(最好使用 groupby),它将用该非零值块中的第一个非零值替换所有非零值,即能给我的东西

    values   new
0      4      4
1      0      0
2      2      2
3      3      2
4      0      0
5      8      8
6      5      8
7      1      8
8      0      0
9      4      4
10     7      4
Run Code Online (Sandbox Code Playgroud)

有没有好的方法来实现这一目标?

Shu*_*rma 4

创建一个布尔掩码来选择具有零的行及其后续行,然后使用此布尔掩码 将where剩余值替换为NaN,然后使用前向填充向前传播值。

m = df['values'].eq(0)
df['new'] = df['values'].where(m | m.shift()).ffill().fillna(df['values'])
Run Code Online (Sandbox Code Playgroud)

结果

print(df)

    values  new
0        4  4.0
1        0  0.0
2        2  2.0
3        3  2.0
4        0  0.0
5        8  8.0
6        5  8.0
7        1  8.0
8        0  0.0
9        4  4.0
10       7  4.0
Run Code Online (Sandbox Code Playgroud)