是否使用A.fillna(method='ffill')
替换后续值?在每一步中如何用负-1代替后续值?
答案 0 :(得分: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'])