Python 3.x lambda数据帧中的行减法

Python 3.x lambda数据帧中的行减法,python-3.x,pandas,dataframe,lambda,apply,Python 3.x,Pandas,Dataframe,Lambda,Apply,我有一个多列的数据框。其中一列是累积收入列。如果年度未结束,则该期间剩余时间的收入将保持不变,因为未来的每日收入为0 数据帧如下所示 现在我想创建一个新列,其中该行被最后一行减去,如果结果为0,则在新列中为该行打印0。如果不是零,则使用行值。新的数据帧应如下所示: 我的想法是使用apply lambda方法来实现这一点。这就是我们的想法: {df['2017new']=df['2017'].应用(如果行-lastrow==0,则lambda x:0) 但是我不知道如何编写代码的行-最后一行部

我有一个多列的数据框。其中一列是累积收入列。如果年度未结束,则该期间剩余时间的收入将保持不变,因为未来的每日收入为0

数据帧如下所示

现在我想创建一个新列,其中该行被最后一行减去,如果结果为0,则在新列中为该行打印0。如果不是零,则使用行值。新的数据帧应如下所示:

我的想法是使用apply lambda方法来实现这一点。这就是我们的想法:

{df['2017new']=df['2017'].应用(如果行-lastrow==0,则lambda x:0)


但是我不知道如何编写代码的行-最后一行部分。如何做到这一点?提前谢谢

我们可以使用
np移动数据并根据条件填充值

df['new'] = np.where(df['2017']-df['2017'].shift(1)==0,0,df['2017'])
df['new'] = df['2017'].where(df['2017']-df['2017'].shift(1)!=0,0)
或使用
df.其中

df['new'] = np.where(df['2017']-df['2017'].shift(1)==0,0,df['2017'])
df['new'] = df['2017'].where(df['2017']-df['2017'].shift(1)!=0,0)
2016年2017年新 0 10 21 21 1 15 34 34 2 70 40 40 3 90 53 53 4 93 53 0 5 99 53 0
使用
np.where

df2['New']=np.where(df2['2017'].diff().eq(0),0,df2['2017'])
df2
Out[190]: 
   2016  2017  New
0    10    21   21
1    15    34   34
2    70    40   40
3    90    53   53
4    93    53    0
5    99    53    0