0

A.fillna(method='ffill')用来替换后继值吗?我们如何在每一步中用负 -1 替换后续值?

4

1 回答 1

0

创建示例 df:

z=pd.DataFrame(np.linspace(1,10,10),columns=['test'])
z.iloc[2]=np.nan
z.iloc[7:]=np.nan
print(z)
   test
0   1.0
1   2.0
2   NaN
3   4.0
4   5.0
5   6.0
6   7.0
7   NaN
8   NaN
9   NaN

为重复出现的 nan 创建一个代理列:

z['proxy'] = z.test.isnull().cumsum().diff().fillna(0)!=0
z['proxy'] = -1*(z.proxy.cumsum() -z.proxy.cumsum().where(~z.proxy).ffill().fillna(0))

重新计算 z.test:

z['test']=z.proxy+z.test.ffill()

结果df:

test  proxy
0  1.0   -0.0
1   2.0   -0.0
2   1.0   -1.0
3   4.0   -0.0
4   5.0   -0.0
5   6.0   -0.0
6   7.0   -0.0
7   6.0   -1.0
8   5.0   -2.0
9   4.0   -3.0

删除代理:

z=z.drop(columns=['proxy'])
于 2018-09-28T14:32:10.550 回答