2017-04-09 48 views
0

我有這樣的代碼(不那麼好)計算列,基於先前行的值計算一列:熊貓:通過循環利用以前行

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) 

只是想知道,如果我們可以用df.apply直接做( )在熊貓,使用通用的方法。

+1

數據採樣/輸出? –

+0

你是否必須使用'df.apply'? – gzc

+0

什麼是更多熊貓風格的東西(除了循環...)。 – Tensor

回答

0

我沒有找到使用df.apply的解決方案,但這可能對您有所幫助。

製作試樣數據

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 

解決方案:

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

正在尋找一般解決方案,使用非循環。 – Tensor

+0

@張量這是更多的熊貓風格,雖然它沒有你期望的那麼一般。 – gzc