2017-07-01 2 views
2

Mit einem Datenrahmen ref und value als Spalten:Pandas - die Schaffung einer Puffer Spalte

ref value buffer 
0  0  0  0 
1  1  3  0 
2  2  4  0 
3  0  2  2 
4  8  21  2 
5  0  -2  -2 
6  3  13  -2 
7  6  17  -2 
8  2  4  -2 
9  0  5  5 
10 0  5  5 

Wie würden Sie die dritte buffer Spalte erstellen, die diese Definition respektiert:

  • wenn ref == 0 dann Puffer = Wert
  • wenn ref != 0 dann Puffer = Wert der nächsten vorherigen Zeile wo ref = 0

Antwort

4

Verwenden where zu halten df.value wenn df.ref == 0. Der Rest wird np.nan sein. Verwenden Sie ffill, um np.nan aus vorherigen Zeilen zu füllen. Verwenden Sie assign, um eine neue Spalte zu erstellen.

Beachten Sie, dass ich die Spalte nicht als int gegossen habe. Ich habe es weggelassen, weil es möglich ist, dass die ersten paar Zeilen von ref nicht null sind. Wenn dies passieren würde, wären die anfänglichen Pufferzeilen np.nan, von denen nichts weiterleiten würde. In dieser Situation konnte ich nicht zu int.

df.assign(buffer=df.value.where(df.ref.eq(0)).ffill()) 
0

könnten Sie die Bedingung in Pandas

df.ix[condition, column_to_apply] = value 
+1

'.ix' wird [veraltet] (http://pandas.pydata.org/pandas-docs/version/0.20/whatsnew.html#deprecate-ix). – ChuHo

+0

Ja, aber immer noch nutzbar –

Verwandte Themen