兩列

2017-01-22 17 views
3

在我的數據框「數據」我有兩列「趨勢」 &「rtrend」兩列

trend條件Python的大熊貓循環值具有值-1,0和1

def newfunc(a): 

j = -1 

for i in a: 

    j = j+1 
    x = (j-1) 

    if data.iloc[j]['trend'] != 0: 

     return data.iloc[j]['trend'] 

    if data.iloc[j]['trend'] == 0: 

     return data.iloc[x]['rtrend'] 

如果trend等於-1或1,那麼我想設置rtrend列值等於trend

如果trend等於0,則將rtrend設置爲等於數據框中上面出現的該系列中的最後一個值。

data['rtrend'] = newfunc(data['trend']) 

當前返回的結果全部爲0。

請有人指出我在正確的方向嗎?我確定必須有更好的方法來做到這一點。 (我試過np.where()這似乎沒有做我以後的)。

回答

4

不要做一個程序慢的for循環。做矢量化的方法。只需將非零數據複製到新的rtrend列中,然後正向填充數據:

df['rtrend'] = df[df.trend!=0]['trend'] 

df 
Out[21]: 
    trend b c rtrend 
a -1.0 1.0 -1.0 -1.0 
c 0.0 -1.0 1.0  NaN 
e 1.0 -1.0 -1.0  1.0 
f -1.0 1.0 -1.0 -1.0 
h -1.0 1.0 1.0 -1.0 

df['rtrend'].ffill() 
Out[22]: 
a -1.0 
c -1.0 
e 1.0 
f -1.0 
h -1.0 
Name: rtrend, dtype: float64 
+0

@piRSquared :-)謝謝! – Boud

+0

儘可能使用'.loc'來避免setingwithcopy警告。 'df.loc [df.trend!= 0,'trend']' –

+0

@TedPetrou嗯不,因爲在這種情況下,我沒有處理左賦值,我所做的數據框視圖是該作業(左側是新列'rtrend') – Boud