2017-04-09 6 views
0

Ich habe diesen Code (nicht so gut), die Berechnung einer Spalte auf der Grundlage früherer Reihen Werte durch Iteration:Pandas: berechnen Spalte vorherigen Zeilen

date_prev_list= np.zeros(len(df)) 
for ii, row in df.iterrows(): 
    col_nb= row['colum_nb'] 
    if col_nb == col_nb_prev : #Condition 

     #Store previous row value in current row 
     date_prev_list[ii]= date_prev 

     #Store previous values 
     date_prev=   row['datesec2'] 
     col_nb_prev=  col_nb 

    else : 
     #Store previous value 
     date_prev= row['datesec2'] 
     col_nb_prev= col_nb   

df['datesec_prev']= pd.Series( date_prev_list) 

Nur frage mich, ob wir direkt mit df.apply tun können () in Pandas, mit der generischen Methode.

+1

Beispieldaten/Ausgabe? –

+0

Müssen Sie 'df.apply' verwenden? – gzc

+0

was auch immer, das ist mehr Pandas Stil (anders als Schleife ...). – Tensor

Antwort

0

Ich habe keine Lösung mit df.apply gefunden, aber das kann Ihnen helfen.

Fabrikat Beispieldaten

In [2]: df = pd.DataFrame({'a': [1,1,2,2,3], 'b': [11,12,13,14,15]}) 

In [3]: df 
Out[3]: 
    a b 
0 1 11 
1 1 12 
2 2 13 
3 2 14 
4 3 15 

Lösung:

In [6]: t = df.a.shift() == df.a 

In [10]: df.b.shift().where(t, 0) 
Out[10]: 
0  0.0 
1 11.0 
2  0.0 
3 13.0 
4  0.0 
Name: b, dtype: float64 
+0

bin auf der Suche nach allgemeinen Lösungen, mit anderen als Schleife. – Tensor

+0

@Tensor Dies ist mehr Pandas-Stil, obwohl es nicht so allgemein ist, wie Sie erwartet haben. – gzc

Verwandte Themen