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