2017-09-18 2 views
2

J'ai une trame de données avec plusieurs colonnes. L'une des colonnes est la colonne des revenus cumulés. Si l'année ne se termine pas alors le chiffre d'affaires sera constante pour le reste de la période parce que le chiffre d'affaires par jour à venir est 0.soustraction de ligne dans lambda pandas dataframe

Le dataframe ressemble à ceci

enter image description here

Maintenant, je veux créer un nouvelle colonne où la ligne est soustraite par la dernière ligne et si le résultat est 0, imprimez 0 pour cette ligne dans la nouvelle colonne. Si ce n'est pas zéro, utilisez la valeur de ligne. Le nouveau dataframe devrait ressembler à ceci:

enter image description here

Mon idée était de le faire avec la méthode apply lambda. C'est donc la pensée:

{df [ '2017new'] = df [ '2017'] appliquer (lambda x: 0 si la ligne - LastRow == 0 sinon x).}

Mais je ne savoir comment écrire la partie row - lastrow du code. Comment faire ça? Merci d'avance!

Répondre

2

Nous pouvons déplacer les données et remplir les valeurs fondées sur la condition à l'aide np.where i.e.

df['new'] = np.where(df['2017']-df['2017'].shift(1)==0,0,df['2017']) 

ou df.where i.e.

df['new'] = df['2017'].where(df['2017']-df['2017'].shift(1)!=0,0) 
 
    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 
3

En utilisant 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