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)
有没有好的方法来实现这一目标?
创建一个布尔掩码来选择具有零的行及其后续行,然后使用此布尔掩码 将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)