如何替换正值减去-1的值?

时间:2018-09-28 12:08:01

标签: pandas fillna

是否使用A.fillna(method='ffill')替换后续值?在每一步中如何用负-1代替后续值?

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'])